[자바 무료 강의] └ [심화] 배열과 메모리 - 코드라떼
Lesson List button
코스자바로 배우는 프로그래밍
hamburger button
강의└ [심화] 배열과 메모리최종수정일 2021-09-06
아이콘약 2분

자바 배열 변수와 배열, 그리고 메모리간의 관계를 배우는 강의입니다. 이 강의를 들으면 배열의 인덱스가 어떤 역할을 하는지 알 수 있어요.

추가 노트

배열과 메모리


자바 배열과 메모리

배열은 여러 개의 공간을 가지고 있으니 변수도 여러 개의 공간을 가지고 있는 것이 아닌가 착각할 수 있는데요. 모든 변수는 하나의 값만 저장합니다. 배열 변수도 예외는 없습니다.

자바 배열과 메모리의 주소

배열을 논할 때는 두 가지로 논해야 합니다. 첫 번째는 배열 공간에 접근할 수 있도록 첫 번째 주소를 저장하는 배열 변수와 실제로 데이터를 저장하는 공간인 배열 공간으로 나눠야 합니다.

배열 공간은 Heap이라는 메모리 공간에 할당되며 배열 공간에 접근하기 위해서는 첫 번째 주소를 통해서 접근할 수 있습니다. 그 첫 번째 주소를 저장하는 것이 배열 변수입니다.

우리가 배열을 사용할 때 배열 변수에 저장된 주소를 이용하여 자연스럽게 인덱스를 이용하여 접근할 수 있는 것이죠.

*Heap 메모리 공간은 이후에 배웁니다.
*일반적으로 배열 공간이라 부르기보다는 배열 인스턴스라고 부릅니다.

자바 배열에 접근하는 법

그리고 배열 공간의 첫 번째 주소를 알고 있고, 배열에 저장되는 자료형을 알고 있다면 인덱스를 이용하여 특정 공간에 접근할 수 있습니다.

첫 번째 주소 + (인덱스 * 자료형의 크기) => 접근할 주소
copy

int (4 byte) 자료형을 저장하는 배열은 각 공간이 4 byte 단위로 떨어져 있으므로 첫 번째 주소에 인덱스를 곱하면 인덱스에 해당하는 배열 공간에 접근할 수 있습니다. 예시로 인덱스 [2]의 메모리 공간에 접근하려면 첫 번째 주소에 인덱스 x 4 byte를 더하면 인덱스 [2] 메모리 공간에 접근할 수 있습니다.

그러므로 인덱스와 자료형을 이용하면 메모리 공간에 접근하는 것이 빠릅니다.

자바 배열에 메모리 접근

첫 번째 주소와 자료형, 그리고 인덱스를 이용하여 메모리 공간에 접근하기 때문에 메모리에 할당할 때 배열 공간을 분할하여 할당하지 않습니다. 만약에 분할한다면 위에서 살펴봤던 메모리 공간에 접근할 수 있는 공식을 사용할 수가 없는 것이죠.

자바 2차원 배열 메모리 접근

2차원 배열도 순차적으로 배열 공간을 할당합니다. 그래서 배열 공간에 접근하는 원리는 동일합니다. 다만 1차원 배열과 다르게 2차원 배열의 공식은 조금 다릅니다.

첫 번째 주소 + (상위 차원 인덱스 * 자료형의 크기) + (하위 차원 인덱스 * 자료형의 크기) => 접근할 주소
copy

3차원 배열도 크게 다르지 않습니다. (다차원 배열도 동일합니다)

첫 번째 주소 + (최상위 차원 인덱스 * 자료형의 크기) + (상위 차원 인덱스 * 자료형의 크기) + (하위 차원 인덱스 * 자료형의 크기) => 접근할 주소
copy

배열의 메모리 공간에 대해서 이해하면 이후에 겪는 문제들에 대한 이해도가 높아지고 문제 해결 능력이 향상됩니다.

도전자 질문
작성된 질문이 없습니다
이용약관|개인정보취급방침
알유티씨클래스|대표, 개인정보보호책임자 : 이병록
이메일 : cs@codelatte.io
사업자등록번호 : 824-06-01921
통신판매업신고 : 2021-성남분당C-0740
주소 : 경기도 성남시 분당구 대왕판교로645번길 12, 9층 24호
Lesson List button
코스자바로 배우는 프로그래밍
hamburger button
강의└ [심화] 배열과 메모리최종수정일 2021-09-06
아이콘약 2분

자바 배열 변수와 배열, 그리고 메모리간의 관계를 배우는 강의입니다. 이 강의를 들으면 배열의 인덱스가 어떤 역할을 하는지 알 수 있어요.

추가 노트

배열과 메모리


자바 배열과 메모리

배열은 여러 개의 공간을 가지고 있으니 변수도 여러 개의 공간을 가지고 있는 것이 아닌가 착각할 수 있는데요. 모든 변수는 하나의 값만 저장합니다. 배열 변수도 예외는 없습니다.

자바 배열과 메모리의 주소

배열을 논할 때는 두 가지로 논해야 합니다. 첫 번째는 배열 공간에 접근할 수 있도록 첫 번째 주소를 저장하는 배열 변수와 실제로 데이터를 저장하는 공간인 배열 공간으로 나눠야 합니다.

배열 공간은 Heap이라는 메모리 공간에 할당되며 배열 공간에 접근하기 위해서는 첫 번째 주소를 통해서 접근할 수 있습니다. 그 첫 번째 주소를 저장하는 것이 배열 변수입니다.

우리가 배열을 사용할 때 배열 변수에 저장된 주소를 이용하여 자연스럽게 인덱스를 이용하여 접근할 수 있는 것이죠.

*Heap 메모리 공간은 이후에 배웁니다.
*일반적으로 배열 공간이라 부르기보다는 배열 인스턴스라고 부릅니다.

자바 배열에 접근하는 법

그리고 배열 공간의 첫 번째 주소를 알고 있고, 배열에 저장되는 자료형을 알고 있다면 인덱스를 이용하여 특정 공간에 접근할 수 있습니다.

첫 번째 주소 + (인덱스 * 자료형의 크기) => 접근할 주소
copy

int (4 byte) 자료형을 저장하는 배열은 각 공간이 4 byte 단위로 떨어져 있으므로 첫 번째 주소에 인덱스를 곱하면 인덱스에 해당하는 배열 공간에 접근할 수 있습니다. 예시로 인덱스 [2]의 메모리 공간에 접근하려면 첫 번째 주소에 인덱스 x 4 byte를 더하면 인덱스 [2] 메모리 공간에 접근할 수 있습니다.

그러므로 인덱스와 자료형을 이용하면 메모리 공간에 접근하는 것이 빠릅니다.

자바 배열에 메모리 접근

첫 번째 주소와 자료형, 그리고 인덱스를 이용하여 메모리 공간에 접근하기 때문에 메모리에 할당할 때 배열 공간을 분할하여 할당하지 않습니다. 만약에 분할한다면 위에서 살펴봤던 메모리 공간에 접근할 수 있는 공식을 사용할 수가 없는 것이죠.

자바 2차원 배열 메모리 접근

2차원 배열도 순차적으로 배열 공간을 할당합니다. 그래서 배열 공간에 접근하는 원리는 동일합니다. 다만 1차원 배열과 다르게 2차원 배열의 공식은 조금 다릅니다.

첫 번째 주소 + (상위 차원 인덱스 * 자료형의 크기) + (하위 차원 인덱스 * 자료형의 크기) => 접근할 주소
copy

3차원 배열도 크게 다르지 않습니다. (다차원 배열도 동일합니다)

첫 번째 주소 + (최상위 차원 인덱스 * 자료형의 크기) + (상위 차원 인덱스 * 자료형의 크기) + (하위 차원 인덱스 * 자료형의 크기) => 접근할 주소
copy

배열의 메모리 공간에 대해서 이해하면 이후에 겪는 문제들에 대한 이해도가 높아지고 문제 해결 능력이 향상됩니다.

도전자 질문
작성된 질문이 없습니다
이용약관|개인정보취급방침
알유티씨클래스|대표, 개인정보보호책임자 : 이병록
이메일 : cs@codelatte.io|운영시간 09:00 - 18:00(평일)
사업자등록번호 : 824-06-01921|통신판매업신고 : 2021-성남분당C-0740
주소 : 경기도 성남시 분당구 대왕판교로645번길 12, 9층 24호(경기창조혁신센터)