[8강] 자바(JAVA)의 배열과 메모리

프로그래밍/자바(JAVA) 2018. 11. 27. 01:47

자바(JAVA)의 배열과 메모리



1. 배열의 메모리 크기


배열을 구성하는 데이터의 자료형에 따라서 배열의 메모리 크기가 결정된다. 크기가 3인 int형 배열 arr을 만들었고 int형은 4byte이므로 arr이라는 변수명의 배열은 총 12byte의 메모리 크기를 차지하게 된다. 실제로 코딩을 할때는 프로그래머가 스트레스를 받으면서 메모리를 계산할 일은 없지만 개발을 하는 입장에서 이러한 기본적인 원리, 구조 정도는 알고 있는 것이 차후에 고난이도의 프로그램을 코딩할때 도움이 될 것이기 때문에 알아두자.



2. 배열을 가리키는 배열이름


기본 자료형 데이터를 담고 있는 변수와 달리 배열 변수는 배열 데이터의 주소를 담고 있다. 지난 시간에 살펴본 기본 자료형과 객체 자료형이 메모리에 존재하는 방식에 차이가 있다고 했다. 기본 자료형은 해당 메모리에 직접 데이터가 들어가지만, 객체 자료형은 직접 들어가지 않고 다른곳에 객체를 만들고 그 변수에는 객체의 메모리 주소만 가지고 있다고 했는데 이것을 레퍼런스라고 했다. 이처럼 배열도 변수에 직접 데이터들이 들어가지 않고(배열i에 10,20,30이 저장되지 않고) 각 인덱스의 값들은 각자의 메모리에 저장되며 변수i에는 첫번째 인덱스의 주소값이 들어간다.



3. 배열 기본속성


배열의 길이를 구할때는 배열명.length 명령어를 사용한다. 배열의 요소를 출력할 때는 Arrays.toString 이라는 객체를 이용하면 해당하는 배열의 요소를 화면에 다 출력할 수 있다. 그리고 Arrays.copyOf 라는 명령어를 통해 배열의 요소를 복사할 수 있는데, 여기서 중요한 것은 배열이 가리키는 주소값이 아닌 순수 배열의 값들만 복사한 것이다. 그렇기 때문에 arrAtt1와 arrAtt3의 배열 값은 같지만 가리키고 있는 주소값은 다른것을 볼 수 있다. 배열 레퍼런스를 통해 arrAtt1이 가리키고 있는 주소값을 arrAtt2에 대입했기 때문에 둘다 같은 곳을 가리키고 있는 것이다.



4. 다차원 배열


다차원 배열은 배열 안에 다른 배열이 존재하는 것을 말한다. 보통 2차원 배열까지는 쓰이지만 3차원 이상의 배열은 거의 쓰이지 않는다. 3차원 배열 이상이 되면 너무 많은 메모리를 필요로 하게 되고 프로그램의 퍼포먼스가 저하될 수가 있으며 로직이 복잡해 질 수 있기 때문이다. 다차원 배열은 대괄호를 2개 사용해서 선언해주고 첫번째 괄호에는 행을 나타내고 두번째 괄호는 열을 나타낸다.