위 int형 배열의 주소값들을 보면 순차적이지 않다. 이렇게 차이가 나는 이유가 무엇일까?
위 사진처럼 스택(Stack)영역에 number 변수가 생성된다. 힙(Heap) 영역에 배열이 생성되고 각각의 배열 인덱스에 값들이 생성된다. 그림만 보았을 땐, 1과 2가 하나의 배열안에 존재하기에 참조값이 연속되지 않을까? 라고 생각할 수 있지만 JAVA의 참조 변수를 다시 살펴보자.
참조 변수는 스택(Stack) 영역에 변수를 생성하고 힙(Heap)영역에 객체를 생성한다. 스택 영의 변수는 힙 영역의 객체 주소를 참조한다.
배열도 동일하다. 스택 영역의 배열 변수는 힙 영역에 생성된 배열의 주소를 참조한다. 힙 영역 내 생성된 배열에 담기는 값들도 객체들이다. 배열 내에는 객체들의 주소를 담고 있는 것과 동일하다. 그렇기 때문에 참조값은 연속되지 않는다. 현재 1과 2는 정수형으로 참조 변수는 아니지만 참조값에 한해서 비슷한 맥락으로 동작한다고 생각한다.
2. 다차원 배열
publicstaticvoidmain(String args[]){
//1. 1차원 배열int[] number = newint[5];
//2. 2차원 배열int[][] = newint[2][3];
//3. 2차원 배열 int[][] = newint[2][];
}
배열의 선언은 위 코드처럼 진행하면 된다. 2번과 3번의 차이가 있음을 처음 알았다. 3번은 0번 행과 1번 행의 열 개수를 다르게 설정할 수 있다. '3번이 유용한가'라고 생각이 들긴 하지만 각 열의 개수 차이가 심할 때, 메모리를 아낄 수 있어 어느정도 유용하겠다라고 정리해봤다.
3. 열거 타입
요일 계산을 할 때 열거타입을 사용한 거말곤 크게 사용해 본 기억은 없다. 그런데 JAVA의 열거 타입은 완전한 클래스의 형태이기에 다른 언어들에서 사용하는 것보다 유용했다.