참조 타입과 원시 타입의 차이 - Java
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
Java 초보 개발자 및 중급 개발자 (난이도: 중간)
핵심 요약
- 원시 타입(예:
int
)은 스택(Stack)에 저장되며, 값 복사가 발생합니다. - 참조 타입(예:
int[]
)은 힙(Heap)에 저장되며, 참조(Reference) 복사가 발생합니다. array2 = array1
처럼 참조 타입을 할당하면 두 변수가 같은 객체를 가리키게 됩니다.
섹션별 세부 요약
1. 배열 생성 및 할당 예시
int[] array1 = {1, 2, 3, 4, 5};
로 배열을 생성하면array1
은 힙에 할당된 배열의 참조를 가집니다.int[] array2 = array1;
로array2
를 생성하면array1
과 동일한 힙 객체를 가리키게 됩니다.array1[2] = 9;
로 값을 수정하면array2
의 값도 동일하게 변경됩니다.
2. 원시 타입의 메모리 처리
int x = 12; int y = x;
처럼 원시 타입을 할당하면 값 복사가 발생합니다.y = 30;
으로y
를 수정하면x
는 영향을 받지 않습니다.- 원시 타입은 스택(Stack)에 저장되며, 별도의 메모리 공간을 사용합니다.
3. 참조 타입의 메모리 처리
- 참조 타입은 힙(Heap)에 저장된 객체의 참조(Reference)를 가리키며, 복사 시 참조만 복사됩니다.
array2 = new int[5];
로 새로운 배열을 생성하면array2
는 기존 객체와 별도의 힙 객체를 가리키게 됩니다.- 이 경우
array1
과array2
는 서로 다른 객체를 가리키므로,array2
의 값 변경은array1
에 영향을 주지 않습니다.
결론
- 참조 타입을 할당할 때는 값 복사가 아닌 참조 복사가 발생하므로, 객체 공유가 발생할 수 있습니다.
array2 = new int[5];
처럼 새로운 객체를 생성해야 동일한 객체를 가리키지 않도록 해야 합니다.- 메모리 관리와 객체 공유를 이해하는 것이 Java 개발에서 중요한 실무 역량입니다.