질문 : 그럼 클래스 안에 메서드 안에 지역 변수로 선언되면 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 |