배열을 생성하려면 통상 3가지 단계를 거치게 된다.
- 선언 - 배열에 대한 참조를 생성한다.
- 배열의 인스턴스화 - 배열을 생성한다.
- 초기화 - 배열의 셀에 값을 할당한다.
이를 단계별로 자세히 알아보자.
1. 선언(Declaration)
배열에 대한 참조 변수를 생성한다.
이 때 실제 배열 객체는 메모리에 생성되지 않는다. 선언은 타입과 배열을 나타내는 대괄호([]), 그리고 참조 변수 이름으로 구성된다.
int[] arr;
2. 인스턴스화(Instantiation)
new 키워드와 함께 배열의 실제 메모리 공간을 할당한다.
배열의 각 요소는 자동으로 해당 타입의 기본값으로 초기화된다. (예를 들어, int 타입의 배열 요소는 0으로 초기화된다).
이 과정에서 배열의 첫 번째 요소([0])에 해당하는 물리적 메모리 주소가 참조 변수에 저장된다.
int[] arr;
arr = new int[3];
2-1 왜 배열은 0부터 시작을 할까?
컴퓨터는 배열의 첫 번째 요소의 메모리 주소를 참조하여 시작점으로 삼는다. 이 주소를 '기준 주소(base address)'라고 부르며, 배열의 다른 요소들은 이 기준 주소로부터의 상대적 위치(offset)로 찾을 수 있다.
즉, 기준점(0)으로 위치를 계산하기 때문이다.
3.초기화(Initialization)
배열의 각 요소에 구체적인 값을 할당한다.
이 과정은 명시적으로 각 요소에 값을 할당하거나, 배열 선언과 동시에 값을 초기화하는 문법을 사용하여 진행할 수 있다.
//순차적으로
int[] arr;
arr = new int[3];
arr[0] = 10;
arr[1] = 10;
arr[2] = 10;
//한번에
int[] arrAtOnce = {10,10,10};
3-1 재미있는 사실 : 순차적으로 초기화하느냐, 한번에 초기화하느냐에 따라서 성능이 달라진다?
순차적으로 초기화할 때는 각 배열 요소에 대해 값을 하나씩 할당해야 하므로, 요소의 개수에 비례해서 시간이 소요된다.
반면에 일괄 초기화 구문을 사용하면 순차적 초기화와 초기화 방식은 같지만, 컴파일러나 런타임 환경에 따라 좀 더 최적화를 해주기때문에 성능이 조금 더 빨라진다. 이는 배열의 크기가 커지면 커질수록 성능의 차이가 벌어지게 된다.
'Java > 자료구조' 카테고리의 다른 글
HashMap - 자바코드 뜯어보기(연결리스트 중심으로) (0) | 2024.01.19 |
---|---|
Queue(ArrayDeque) - 자바 코드 뜯어보기 (0) | 2024.01.10 |
Stack - 자바 코드 뜯어보기 (1) | 2023.12.30 |
LinkedList - 자바 코드 뜯어보기 (2) | 2023.12.22 |
ArrayList - 배열을 이용한 동적인 컬렉션 (1) | 2023.11.20 |