자바에서 배열의 선언
// 배열의 선언 방식
int[] arr;
int arr2[];
type, 변수명 구분 없이 [] 키워드를 넣을 수 있다.
배열의 생성, 초기화
int arr[] = new int[5]; // 크기 5의 int 배열 선언 및 생성
arr[0] = 1; // 배열의 초기화
arr[1] = 2;
arr[2] = 3;
int arr2[] = new int[]{1, 2, 3} // 크기 3의 int 배열 선언, 생성 및 초기화
int arr3[] = {1, 2, 3} // 위와 같은 배열을 가짐.
new 키워드를 통해 배열 객체를 생성한다. 이 때 대괄호([]) 안에 배열의 사이즈를 넣는다.
값의 초기화, 변경은 일반적인 배열의 형태와 같이 arr[index] = value 형태로 가능하다.
아래와 같이 생성과 동시에 초기화 할 수 있는데, 중괄호({}) 내에 초기화 할 값을 넣어 초기화한다.
이 때 배열의 사이즈는 중괄호 내 요소의 개수로 정해진다.
new 키워드를 생략하고 중괄호만을 통해 생성 및 초기화를 할 수도 있다.
배열의 순회 with for loop
for문을 통해 배열을 순회 할 때 일반적인 방식은 0부터 arr.length 전의 값까지를 index로 배열을 순회하는 다음과 같은 방식이다.
int[] arr = {1, 2, 3, 4, 5};
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
// log : 1 2 3 4 5
배열을 순서대로 순회할 때, for문에서 아래와 같은 문법을 통해 더욱 쉽고 간결하게 순회 할 수 있다.
int[] arr = {1, 2, 3, 4, 5};
for (int value : arr) {
System.out.print(value + " ");
}
// log : 1 2 3 4 5
for문에서 (int value : arr) 을 통해 arr 배열의 각 값을 순서대로 순회한다. 이 때 각 값은 value에 해당한다.
다차원 배열의 선언, 생성, 초기화
* 3,4,..,n차원 배열 역시 같은 방식이므로 본 글에서는 다차원 배열로 2차원 배열을 예로 든다.
2차원 배열은 1차원 배열과 같은 방식으로, 대괄호의 개수가 하나 더 늘어난다.
// 2차원 배열의 선언
int[][] arr;
int arr2[][];
// 2차원 배열의 생성
int[][] arr = new int[2][3];
// 2차원 배열의 생성 및 즉시 초기화
int[][] arr = new int[][] {
{1, 2, 3},
{4, 5, 6}
};
int[][] arr2 = {
{1, 2, 3},
{4, 5, 6}
};
눈 여겨 볼 점은 아래 2차원 배열의 생성 및 초기화이다.
중괄호 내에 각 행 별로 다시 중괄호를 쳐서 초기화 하는 방식이다.
한 줄에 모두 적어도 무방하나, 가독성을 위해 줄바꿈으로 보기 좋게 작성하는 것이 좋다.
2차원 가변 배열
int[][] arr = new int[3][2]; 와 같은 방식으로 배열을 생성하게 되면 행과 열의 크기 모두 미리 정해지게 된다.
각 행의 크기를 가변적으로 지정하기 위해서는 배열을 생성 할 때 뒤의 대괄호 사이즈를 지정하지 않고 각 행마다의 사이즈를 직접 지정하면 된다.
// 행의 크기를 지정하지 않음
int[][] arr = new int[5][];
// 각 행의 크기를 가변적으로 지정
arr[0] = new int[5];
arr[1] = new int[1];
arr[2] = new int[4];
arr[3] = new int[3];
arr[4] = new int[2];
+ 자바에서 Array의 경우는 사이즈가 생성 할 때 지정한 크기로 고정되어 있으며, 생성한 후 사이즈를 가변적으로 늘리거나 줄일 수 없다.
가변적인 사이즈를 갖는 배열 형태를 원한다면 ArrayList와 같은 타입을 사용해야한다.
출처 : 남궁성 저자 - Java의 정석
'Java' 카테고리의 다른 글
[Effective Java] Item06. 불필요한 객체 생성을 피하라 (0) | 2022.06.01 |
---|---|
[Effective Java] Item03. private 생성자나 열거 타입으로 싱글턴임을 보증하라 (0) | 2022.05.31 |
[Effective Java] Item02. 생성자에 매개변수가 많다면 빌더(Builder)를 고려하라 (0) | 2022.05.31 |
[Effective Java] Item01. 생성자 대신 정적 팩터리 메서드를 고려하라 (0) | 2022.05.31 |
[Java] 자바의 특징 (0) | 2022.02.13 |