배열
배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
을 말한다. 즉, 연관이 있는 같은 타입의 변수를 여러 개 쓰기 귀찮으니 배열로 묶어서 한 번에 관리하겠다는 뜻이다.
int score1, score2, score3, score4, score5; //귀찮음
int[] score = new int[5] //score[0~4]까지 5개 생성
배열을 사용하면 위와 같이, 같은 타입의 변수를 간단하게 나타낼 수 있다.
배열의 선언과 생성
타입[] 변수 이름; //배열 선언
변수 이름 = new 타입[길이]; //배열 생성
타입[] 변수 이름 = new 타입[길이]; //배열의 선언과 생성을 한번에
//예시
int[] score = new int[5]
자바에서 배열을 선언하고 생성하는 것은 C++에서 동적 할당하는 문법과 비슷하다.
그렇다고 자바에서 저 문법을 통해서 배열을 동적 할당할 수 있다는 것은 아니다.
배열이 생성될 때 각 요소의 값은 '0'으로 초기화된다.
배열의 초기화
int[] score = new int [5];
score[0] = 1;
score[1] = 2;
score[2] = 3;
score[3] = 4;
score[4] = 5;
배열은 선언과 생성 후에 초기화를 해주는 방법이 있다.
여기서 초기화는 reset이 아니라 초기 값을 설정해 준다는 뜻이다.
int[] score = new int[] {1, 2, 3, 4, 5};
int[] score = {1, 2, 3, 4, 5} //new int[] 생략 가능
생성과 동시에 초기화를 해주는 방법도 존재한다.
score[0] = 1 | score[1] = 2 | score[2] = 3 | score[3] = 4 | score[4] =5 |
초기화가 완료된 배열은 위와 같이 나타내어진다.
배열의 길이
입력받은 수만큼 반복문을 돌린다던가 할 때 배열의 길이가 궁금할 때가 있다.
그때 배열이름.length를 사용하면 배열의 길이를 알 수 있다.
int[] arr = new int[5]; //길이가 5인 배열 선언 및 생성
int len = arr.length; //len = 5
배열의 출력
for문 사용
int arr[] = new int[] {0, 1, 2, 3, 4};
for(int i = 0; i < arr.length; i++) {
System.out.printf("%d ", arr[i]); //출력 : 0 1 2 3 4
}
배열을 출력하기 위해서는 반복문을 사용하여 배열의 처음부터 끝까지 출력하는 방법이 일반적이다.
Arrays.toString() 사용
int arr[] = new int[] {0, 1, 2, 3, 4};
System.out.println(arrys.toString(arr)); //출력 : [0, 1, 2, 3, 4]
하지만 Arrays.toString(배열이름)을 활용하면 더 간단하게 출력할 수 있다.
이 경우 배열의 요소들을 문자열로 만들어서 반환한다.
배열의 복사
for문 사용
int arr1[] = new int[] {0, 1, 2, 3, 4};
int arr2[] = new int[5];
for(int i = 0; i < arr1.length; i++) {
arr2[i] = arr1[i];
}
System.out.println(Arrays.toString(arr1)); //출력 : [0, 1, 2, 3, 4]
System.out.println(Arrays.toString(arr2)); //출력 : [0, 1, 2, 3, 4]
배열의 복사 역시 for문을 통해서 하는 것이 일반적이다.
하지만 이 경우 배열의 요소 하나하나에 접근해서 복사하기 때문에 배열의 크기가 커지면 시간이 오래 걸린다는 단점이 있다.
System.arraycopy() 사용
int arr1[] = new int[] {0, 1, 2, 3, 4};
int arr2[] = new int[5];
//System.arraycopy("복사하는 배열", "복사 시작 인덱스", "붙여넣는 배열", "붙여넣기 시작 인덱스", "복사하려는 데이터 수")
System.arraycopy(arr1, 0, arr2, 0, arr1.length)
System.out.println(Arrays.toString(arr1)); //출력 : [0, 1, 2, 3, 4]
System.out.println(Arrays.toString(arr2)); //출력 : [0, 1, 2, 3, 4]
String 배열
String 배열은 문자열을 담는 배열이다. 각각의 요소에 문자열을 하나씩 담을 수 있다.
String 배열의 초기화
String[] name = new String[3];
name[0] = "Java"
name[1] = "C++"
name[2] = "Python"
배열은 선언과 생성 후에 초기화 해주는 방법은 위와 같다.
String[] name = new String[] {"Java", "C++", "Python"};
String[] name = {"Java", "C++", "Python"} // new String[] 생략 가능
생성과 동시에 초기화를 해주는 방법도 존재한다.
name[0] = "Java" | name[1] = "C++" | name[2] = "Python" |
초기화가 끝난 배열은 위와 같이 생성된다.
다차원 배열
코딩을 하다 보면 다차원 배열을 사용할 일이 생긴다.
예를 들어, 그래프를 나타낼 때 노드와 간선을 2차원 배열로 표현하면 쉽게 나타낼 수 있다.
3차원, 4차원 배열도 생성이 가능하지면 쓸 일이 거의 없기 때문에 2차원 배열만 잘 알고 있으면 된다.
따라서 이 글의 모든 설명은 2차원 배열을 가정하고 하겠다.
2차원 배열의 선언과 생성
int[][] score = new int[3][3];
int[] score[] = new int[3][3];
int score[][] = new int[3][3];
위의 세 가지 문법을 통해 2차원 배열을 선언하고 생성할 수 있다.
int 타입의 2차원 배열을 score란 이름으로 선언하고 3X3의 크기로 생성한 것이다.
score[0][0] | score[0][1] | score[0][2] |
score[1][0] | score[1][1] | score[1][2] |
score[2][0] | score[2][1] | score[2][2] |
이 배열에 접근하기 위한 인덱스는 위의 표와 같다.
score[0][0] = 1; //score 배열의 1행 1열에 1을 저장
System.out.printlf(score[0][0]); //score배열의 1행 1열 값을 출력
2차원 배열의 초기화
int[][] score = new int[][] { {1,2,3}, {4,5,6}, {7,8,9} };
int[][] arr = { {1,2,3}, {4,5,6}, {7,8,9} }; //new int[][] 생략 가능
위의 방법으로 2차원 배열을 초기화하면 아래의 표와 같이 만들어진다.
score[0][0] = 1 | score[0][1] = 2 | score[0][2] = 3 |
score[1][0] = 4 | score[1][1] = 5 | score[1][2] = 6 |
score[2][0] = 7 | score[2][1] = 8 | score[2][2] = 9 |
총평
지금까지 자바의 배열에 대해 알아봤다.
C++이랑 큰 차이는 없어서 간단하게 정리만 해봤다.
다음 글부터는 객체지향 프로그래밍에 대해 공부해볼 예정이다.
'✏️Java 공부 > Java의 정석' 카테고리의 다른 글
[Java 공부/Java의 정석] Chapter.06 : 객체지향 프로그래밍 1 - 3 (기본형 매개변수와 참조형 매개변수) (0) | 2022.07.01 |
---|---|
[Java 공부/Java의 정석] Chapter.06 : 객체지향 프로그래밍 1 - 2 (변수와 메서드) (0) | 2022.07.01 |
[Java 공부/Java의 정석] Chapter.06 : 객체지향 프로그래밍 1 - 1 (객체지향언어, 클래스와 객체) (0) | 2022.06.30 |
[Java 공부/ Java의 정석] Chapter 03. 연산자 & Chapter 04 : 조건문과 반복문 (0) | 2022.01.23 |
[Java 공부/ Java의 정석] Chapter 01. 자바를 시작하기 전에 & Chapter 02 : 변수 (0) | 2022.01.22 |
댓글