개발 일지/Java

[Java] 배열(array)

미숫가루설탕많이 2022. 12. 26. 19:12

 배열(array)은 같은 타입의 변수들을 하나의 묶음으로 묶은 자료 구조이다. 배열을 구성하는 각각의 값을 배열 요소(element)라고 하며, 배열에서의 위치를 가리키는 숫자는 인덱스(index)라고 한다.

 

 Java에서 인덱스는 0부터 시작한다.

ex) [ 1 ,2, 3, 4 ] 이면 0번째 인덱스는 1이고 2번째 인덱스는 3이다.

 

 배열은 같은 종류의 데이터를 많이 다뤄야 하는 경우에 사용할 수 있는 기본적인 자료 구조이며, 선언되는 형식에 따라 1차원 배열, 2차원 배열 또는 그 이상의 다차원 배열로도 선언할 수 있다. 참고로, 2차원 이상의 배열을 다차원 배열이라고 한다.

 

 

 

 

1차원 배열의 선언과 초기화


 1차원 배열은 가장 기본적인 배열로 다음과 같이 타입 뒤에 대괄호를 붙여서 선언하고 초기화할 수 있다.

 

int[] example;	// 배열을 가리킬 참조 변수 example을 선언
example = new int[10];	/* 총 10개의 int형 값을 저장할 수 있는 배열 생성
						   배열의 모든 요소는 int형의 기본값인 0으로 초기화 되어있다.
                           대입 연산자(=)에 의해 생성된 배열 첫 번째 요소의 주소값이 참조 변수 example에 할당된다. */

 

 자바에서 배열은 참조 타입에 해당된다. 이는 int형이나 double형과 같은 기본 타입의 경우, 기본 타입의 값을 저장할 변수를 선언하는 시점에 얼마 만큼의 메모리 공간을 확보해야 하는지 컴퓨터가 알 수 있다. 하지만 참조 타입으로 선언할 경우, 배열을 선언하는 시점에 배열이 몇 개의 요소를 가질지 컴퓨터가 알 수 없기 때문에 이후에 생성될 배열의 주소값을 담을 메모리 공간만이 확보된다. 그리고 배열이 생성되고 난 다음에 배열의 시작 주소값이 참조 변수에 할당된다.

 

 위 코드로 생성한 배열의 요소는 모두 int형의 기본값인 0으로 초기화 되어져있는 상태이다. 여기에 실제 값을 넣어서 초기화하려면 아래와 같이 하면 된다.

 

int[] example = new int[] {1, 2, 4, 8, 16, ..., 1000}

// 선언과 초기화를 하나의 문장으로도 할 때에 한해서 new int[]를 생략할 수 있다.
int[] example = {1, 2, 4, 8, 16, ..., 1000}

 

 이렇게 하면 참조 변수 example이 선언되고 배열이 생성되어 중괄호 내의 값으로 배열 요소들이 초기화 된다. 생성된 배열의 첫 번째 요소의 주소값이 참조 변수 example에 할당된다.

 

 

 

 

값 접근하기


 배열 내 특정 요소에 할당되어져 있는 값에 접근하려면 인덱스를 활용하면 된다.

 

int[] example = {1, 2, 4, 8, 16, ..., 1000}

// 참조 변수가 가진 배열에서 세 번째 값에 접근한다면
example[2] // 여기서 인덱스는 0부터 시작하므로 세 번째 값에 접근하기 위해서 2를 사용

 

 

 

 

배열의 길이


 배열이 가진 요소의 개수를 배열의 길이 또는 크기라고 한다. 배열의 길이는 .length를 이용해서 얻을 수 있다.

 

int[] example = new int[10];

System.out.println(example.length); // 10

 

 여기서 인덱스는 0부터 시작하므로, 배열의 길이가 10이라면 배열 마지막 요소의 인덱스는 9가 된다.

 

 

 

 

2차원 배열의 선언과 초기화


 2차원 배열을 선언하고 초기화하는 방법은 1차원 배열과 유사하다.

 

int [][] example;
example = new int[10][3];

// int [][] example = new int[10][3]; 이렇게 한 줄로 표현도 가능하다.

 

 위 코드가 실행되면 다음과 같은 2차원 배열이 만들어진다.

 

{
	{0, 0, 0},
	{0, 0, 0},
	{0, 0, 0},
    
    ...
    
	{0, 0, 0}
}

/* 이 2차원 배열의 내부 배열은 int형의 기본값인 0을 3개씩 저장하고 있으며,
   외부 배열은 내부 배열 {0, 0, 0} 10개를 저장하고 있다.
   즉, 내부 배열은 3개의 0을 요소로 갖지만 외부 배열의 각 요소는 내부 배열의 주소값을 저장하고 있다. */

 

 값을 넣어 초기화를 하는 경우에는 1차원 배열과 같은 맥락으로 내부 배열의 중괄호 안에 값을 입력하면 된다.

 

 

 

 

가변 배열


 2차원 이상의 다차원 배열에서는 마지막 차수에 해당하는 배열의 길이를 고정하지 않아도 되며, 이러한 배열을 가변 배열이라고 한다.

 

 가변 배열은 다음과 같이 선언하고 초기화할 수 있다.

 

int[][] example = new int[5][];

System.out.println("Arrays.toString(example) = " + Arrays.toString(example));
// Arrays.toString(example) = [null, null, null, null, null]

 

 위 코드의 new int[5][] 에서 외부 배열의 크기는 5로 지정했지만 마지막 차수에 해당하는 내부 배열에는 크기를 정하지 않앗다. 이처럼 마지막 차수에 해당하는 배열의 크기를 지정하지 않으면 가변 배열이 생성된다.

 

 내부 배열을 생성하려면 new int[]를 사용해서 외부 배열의 각 요소에 할당해주면 된다.

 

int[][] example = new int[5][];

example[0] = new int[5];
example[1] = new int[6];
example[2] = new int[7];
example[3] = new int[8];  
example[4] = new int[9];

System.out.println("Arrays.toString(example[0]) = " + Arrays.toString(example[0]));
System.out.println("Arrays.toString(example[1]) = " + Arrays.toString(example[1]));
System.out.println("Arrays.toString(example[2]) = " + Arrays.toString(example[2]));
System.out.println("Arrays.toString(example[3]) = " + Arrays.toString(example[3]));
System.out.println("Arrays.toString(example[4]) = " + Arrays.toString(example[4]));



// 결과
// Arrays.toString(example[0]) = [0, 0, 0, 0, 0]
// Arrays.toString(example[1]) = [0, 0, 0, 0, 0, 0]
// Arrays.toString(example[2]) = [0, 0, 0, 0, 0, 0, 0]
// Arrays.toString(example[3]) = [0, 0, 0, 0, 0, 0, 0, 0]
// Arrays.toString(example[4]) = [0, 0, 0, 0, 0, 0, 0, 0, 0]

 

'개발 일지 > Java' 카테고리의 다른 글

[Java] 클래스(Class)  (0) 2022.12.27
[Java] 객체 지향 프로그래밍(OOP)  (0) 2022.12.27
[Java] 반복문(Repetitive Statement)  (0) 2022.12.23
[Java] 조건문(Conditional Statement)  (0) 2022.12.23
[Java] 콘솔 입출력(I/O)  (0) 2022.12.22