본문 바로가기

개발/Java

원시타입(Primitive type)과 참조타입(Reference type)

질문 : 그럼 클래스 안에 메서드 안에 지역 변수로 선언되면 heap영역에 된다는거지? 예를들어서 productService.java에 getProduct() 메서드 안에 int x = 10 이런식으로 되어있으면 heap영역에 저장되는거야?


❌ 정답:

int x = 10 이 메서드 안에서 지역 변수로 선언되었으면,
👉 무조건 스택(stack) 영역에 저장돼.
✔️ 클래스 안에 있든 말든, 지역 변수는 스택에 저장돼.


🔍 다시 정확히 정리해볼게:

✔️ 이런 경우:

public class ProductService {
    public void getProduct() {
        int x = 10;  // ✅ 지역 변수 → 스택에 저장
    }
}
  • x는 getProduct() 메서드가 호출될 때 생성되고
  • 메서드가 끝나면 스택 프레임과 함께 사라지는 임시 메모리야
  • 힙에는 안 올라감

🧠 언제 힙에 올라가냐?

선언 위치 저장 위치 예시

메서드 안에서 선언된 원시 타입 ✅ 스택 int x = 10;
객체 안에 있는 인스턴스 변수 ✅ 힙 private int age;
new로 만든 객체 ✅ 힙 new Product(), new int[5]
참조 변수 (주소만 저장됨) ✅ 스택 Product p = new Product() → p는 스택, 객체는 힙

💬 면접에서 이렇게 말하면 좋아:

메서드 내부에 선언된 원시 타입 변수는 스택 영역에 저장됩니다.
클래스 내부라도 메서드 지역 변수로 선언되면 스택에 저장되며, 객체의 필드로 선언되었을 때만 힙에 저장됩니다.


필요하다면 이걸 스택/힙 메모리 구조 그림으로도 정리해줄 수 있어! 원해?

'개발 > Java' 카테고리의 다른 글

Java의 스레드와 콜스택  (0) 2025.05.23
직렬화  (0) 2025.05.22
Java GC(Garbage Collector)  (1) 2024.12.04
TaskScheduler를 이용한 주문 취소 구현해보기  (0) 2024.11.27
디버깅  (0) 2024.11.25