초보자의 개발 일지
[JAVA] -자바의 메모리 영역과 배열- 본문
오늘 배운 내용
● 자바의 메모리 영역
● 배열
- 자바의 메모리 영역 -
배열을 제대로 이해하기 위해선 자바의 메모리 영역의 구조에 대해 학습이 필요해 보였다.
이전 강의시간에 메모리 영역에 대한 언급이 있어 어느 정도 이해를 한 부분이 있었지만, 제대로 정리를 해보려 한다.
먼저 자바는 크게 스택, 힙 , 스태틱 영역으로 나뉜다.
스택 -
지역변수 , 매개변수, 리턴 값 등이 저장되는 공간으로 배열에 사용할 참조 변수도 이곳에 저장된다.
힙-
동적 영역으로 new 연산자를 통해 생성된 객체와 배열의 인덱스가 이곳에 저장된다.
스태틱 -
자바의 필드, 생성자, 메소드 에서 필드 부분에서 선언한 변수들이 이곳에 저장된다.
그 외, static 이 붙은 자료형 변수들이 저장되며 프로그램이 시작부터 종료될 때까지 이곳에 저장된다.
-배열의 메모리 영역 구조-

stack 영역에 자료형 int를 받는 참조 변수 Array1이 생성이 된다.
new 연산자를 통해 인덱스 0 1 2를 갖는 변수가
heap 영역에 생성이 된다. heap은 동적 영역으로 사용자에 의해 동적으로 할당되고 해제된다.
이렇듯,
stack 영역에 생성된 Array1이라는 참조 변수가 heap 영역에 생성된 인덱스 0 , 1 , 2의 주소값을 참조하게 된다.
만약 heap 영역에서 주소값을 참조 받지 못하는 변수가 있을 시, 이는 자바의 가비지 컬렉터로 인해 자동으로 메모리가 지워지게 된다.
-배열 복사-
배열을 복사하게 되면 만들어진 참조 변수는 heap 영역에 만들어진 인덱스 값을 가리키게 된다.
그런데 복사 방법에 따라 heap 영역에 또 다른 인덱스 값을 가리키게 하여 다른 주소값을 가질 수도 있다.

이렇게 하면 array1 변수와 array2의 변수는 stack에 다른 참조 변수로써 생성은 되지만,
heap 영역에 생성된 같은 인덱스 값을 참조하게 된다. 그래서 두 개의 참조 변수에 어느 한쪽의 인덱스 값을 변경 해 주면
다른 쪽 참조 변수의 인덱스 값도 변경이 된다.
for문을 이용한 복사
System.arraycopy(원본 배열, 복사 시작 인덱스, 복사본 배열, 복사 시작위치, 복사할 길이) 메소드
Arrays.copyOf(원본 배열, 복사본 배열 길이) 메소드
clone() 메소드
를 통해 주소값을 다르게 하여 stack 영역에 다른 참조 변수가 heap 영역에 각각 다른 인덱스 값을 가리키게 할 수도 있다.
'Programming > Java' 카테고리의 다른 글
| [JAVA] 컬렉션(List , Set) (0) | 2022.12.10 |
|---|---|
| [JAVA] 기본API와 예외처리, 입출력스트림 (0) | 2022.12.07 |
| [JAVA] 객체와 접근제한자, 상속과 다형성 (0) | 2022.11.30 |
| [JAVA] -형변환, 연산자, 문자열비교- (0) | 2022.11.21 |
| [JAVA] -JAVA 프로그래밍의 기초와 개발환경 구축- (0) | 2022.11.17 |