[JAVA] 자바 배열 선언 및 초기화
▣ 자바 배열의 선언과 초기화
배열[]이란 같은 자료형을 메모리상에 연속적으로 나열하여 관리하기 편하게 하는
방식인데요. 어떻게 선언하고 초기화 하는지 알아보고 메모리상에는 어떻게 나열되는지
살펴보도록 하겠습니다.
사용할 수 있는 자료형은 기본 자료형 8가지와 String, System 등의 class형까지 모두
사용할 수 있습니다. 여기서 하나 기억해야 할것은 배열명 (위 예의 sh, a)는 어딘가의
주소를 기억하는 무조건 4byte의 레퍼런스 형이라는 점입니다.
초기화 방법에는 위처럼 세가지의 방법이 있습니다. 첫번째의 경우는 선언과 동시에
초기화 하는 방법이고 두번째, 세번째는 선언과는 별도로 초기화 할 수 있습니다.
첫번째 방법부터 살펴보도록 할게요.
이 방법은 해당 자료형으로 여러개의 공간을 힙 영역에 할당하여 초기값을 줄 수 있습니다.
메모리상에 공간의 개수는 초기값의 개수와 동일하게 나타납니다.
다음과 같은 메모리가 있을때 자바배열은 실제 메모리가 할당된는 영역은 Heap영역 입니다.
이 영역의 특징은 자료형이 할당되면 자동으로 초기화가 이루어 집니다. 그리고 이곳에
메모리를 할당하려면 「new」를 사용해야 합니다. 이 영역의 메모리는 자동으로 나중에
Garbage Collector에 의해서 소멸되게 됩니다.
다음과 같은 예를 가지고 어떻게 할당되는지 살펴보도록 하겠습니다.
■ int [] a={1,2,3};
이런 예제가 있다고 가정하면 a라는 이름의 배열명은 스택 영역에 메모리 4byte로 할당이 됩니다.
그리고 초기화할때 세개의 값을 표시해 두었기 때문에 힙의 영역에 int형 세개의 공간이
생겨나게 되고 각 영역의 이름은 [0], [1], [2]의 값을 가지게됩니다.
그리고 각 영역은 초기화 한 값인 1, 2, 3을 가지게 됩니다. 그리고 이것들이 메모리상의
어느 위치에 있는지는 a가 기억을 하게 됩니다. 막약에 메모리상의 주소가 5억 번지라고
한다면 a는 5억이라는 숫자를 기억하게 되는 것입니다.
그리고 자료형이 int이기 때문에 힙영역에서 4byte씩의 공간을 세개 차지하게 되는 것입니다.
두번째 방법을 알아보도록 하겠습니다.
■ char [] ch; ◀ 선언
■ ch []= new char[3]; ◀ 초기화
다음과 같은 배열예제가 있으면 우선 선언하게 되면 첫번째와 마찬가지로 레퍼런스형 필드가
4byte로 스택 영역에 할당이 됩니다. 그리고 초기화를 진행하면 char은 2byte이니까 2byte씩
3개의 공간이 힙 영역에 할당이 되며, 초기값은 char의 디폴트 값인 '\0'의 값이 됩니다.
마지막 세번째는 위의 두 방식의 혼합형으로 두번째 방식처럼 먼저 초기화 값을
가진 다음에 그 위치에 다른 값들이 대입되는 형식입니다.
■ boolean [] a= new bloane[]{false, true, true};
이런 예제가 있다고 가정했을때, 먼저 a가 4byte 레퍼런스로 스택 영역에 할당이 되고, 힙영역에
세개의 공간이 확보가 됩니다. 그때는 모두 디폴트 값인 flase가 대입된 다음에 나중에 각 영역에
a[0]=flase, a[1]=true, a[2]= true 로 지정이 되는 방식입니다.