Notice
Recent Posts
Recent Comments
Link
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

초보자의 개발 일지

[JAVA] -자바의 메모리 영역과 배열- 본문

Programming/Java

[JAVA] -자바의 메모리 영역과 배열-

초보자12 2022. 11. 23. 23:26

오늘 배운 내용

● 자바의 메모리 영역

 

● 배열

 

 

 

 - 자바의 메모리 영역 - 

배열을 제대로 이해하기 위해선 자바의 메모리 영역의 구조에 대해 학습이 필요해 보였다.

이전 강의시간에 메모리 영역에 대한 언급이 있어 어느 정도 이해를 한 부분이 있었지만, 제대로 정리를 해보려 한다.

 

먼저 자바는 크게 스택, 힙 , 스태틱 영역으로 나뉜다.

 

스택 -

 

지역변수 , 매개변수, 리턴 값 등이 저장되는 공간으로 배열에 사용할 참조 변수도 이곳에 저장된다.

 

 

힙-

동적 영역으로 new 연산자를 통해 생성된 객체와 배열의 인덱스가 이곳에 저장된다.

 

 

 

스태틱 -

자바의 필드, 생성자, 메소드 에서 필드 부분에서 선언한 변수들이 이곳에 저장된다.

그 외, static 이 붙은 자료형 변수들이 저장되며 프로그램이 시작부터  종료될 때까지 이곳에 저장된다.

 

 

 

-배열의  메모리 영역 구조-

new 를 통해 배열  변수 선언과 동시에 배열 생성

stack 영역에 자료형 int를 받는 참조 변수 Array1이 생성이 된다.

 

new 연산자를 통해 인덱스 0 1 2를 갖는 변수가 

 

heap 영역에  생성이 된다. heap은 동적 영역으로 사용자에 의해 동적으로 할당되고 해제된다.

 

이렇듯,  

stack 영역에 생성된 Array1이라는 참조 변수가 heap 영역에 생성된 인덱스 0 , 1 , 2의 주소값을 참조하게 된다.

 

만약 heap 영역에서 주소값을 참조 받지 못하는 변수가 있을 시, 이는 자바의 가비지 컬렉터로 인해 자동으로 메모리가 지워지게 된다.

 

 

-배열 복사-

 

배열을 복사하게 되면 만들어진 참조 변수는 heap 영역에 만들어진 인덱스 값을 가리키게 된다.

 

그런데 복사 방법에 따라 heap 영역에 또 다른 인덱스 값을 가리키게 하여 다른 주소값을 가질 수도 있다.

array2에 array1을 복사

이렇게 하면 array1 변수와 array2의 변수는 stack에 다른 참조 변수로써 생성은 되지만, 

 

heap 영역에 생성된 같은 인덱스 값을 참조하게 된다. 그래서 두 개의 참조 변수에  어느 한쪽의 인덱스 값을 변경 해 주면

 

다른 쪽 참조 변수의 인덱스 값도 변경이 된다. 

 

for문을 이용한 복사 

System.arraycopy(원본 배열, 복사 시작 인덱스, 복사본 배열, 복사 시작위치, 복사할 길이) 메소드

Arrays.copyOf(원본 배열, 복사본 배열 길이) 메소드

clone() 메소드

 

를 통해 주소값을 다르게 하여 stack 영역에 다른 참조 변수가 heap 영역에 각각 다른 인덱스 값을 가리키게 할 수도 있다.