Java에서 참조 타입과 원시 타입의 차이: 스택과 힙 메모리 분배 비교
AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

참조 타입과 원시 타입의 차이 - 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는 기존 객체와 별도의 힙 객체를 가리키게 됩니다.
  • 이 경우 array1array2는 서로 다른 객체를 가리키므로, array2의 값 변경은 array1에 영향을 주지 않습니다.

결론

  • 참조 타입을 할당할 때는 값 복사가 아닌 참조 복사가 발생하므로, 객체 공유가 발생할 수 있습니다.
  • array2 = new int[5];처럼 새로운 객체를 생성해야 동일한 객체를 가리키지 않도록 해야 합니다.
  • 메모리 관리와 객체 공유를 이해하는 것이 Java 개발에서 중요한 실무 역량입니다.