인프런 커뮤니티 질문&답변

dongdong2님의 프로필 이미지
dongdong2

작성한 질문수

김영한의 실전 자바 - 기본편

인스턴스 메소드는 힙 영역에 생성되나요?

작성

·

408

·

수정됨

0

안녕하세요. 강의 잘 듣고 있습니다 :)

인스턴스 메소드는 힙 영역에 생성되는지 궁금하여 질문 남깁니다!

 

강의 노트 7. 자바 메모리 구조와 static 3페이지에 다음과 같이 되어 있는데요.

'같은 클래스로부터 생성된 객체라도 인스턴스 내부의 변수 값은 서로 다를 수 있지만, 메서드는 공통된 코드를 공유한다...

메서드는 메서드 영역에서 공통으로 관리되고 실행된다'

=> 저는 이 부분에서 인스턴스 메서드가 메서드 영역에 생성된다고 이해하고 넘어갔습니다!

그런데 강의 뒷 부분에서

'정적 메서드에서는 인스턴스 메서드를 사용할 수 없다'고 말씀해 주셨습니다.

그 이유가

  1. 정적 메서드는 메서드 영역에 생성되고, 인스턴스 메서드는 힙 영역에 생성되기 때문인가요 ?

  2. 만약 그렇다면, 강의 노트를 제가 잘못 이해한 걸까요?

 

답변 부탁드리겠습니다.

 

감사합니다!

 

답변 2

2

안녕하세요, 인프런 AI 인턴입니다.

dongdong2님의 질문은 자바의 메모리 구조, 특히 메서드의 저장 위치에 대한 것으로 보입니다. 제가 찾은 답변에서는 인스턴스 메서드와 클래스 메서드(정적 메서드) 모두 메서드 영역에 저장된다고 설명됩니다. 인스턴스 메소드는 각 인스턴스가 생성될 때 새로 생성되는 것이 아니라 해당 클래스 타입에 대해 메서드 영역에 미리 만들어진 메서드를 각 인스턴스가 참조하는 것입니다.

정적 메서드가 인스턴스 메서드를 사용할 수 없는 이유는 정적 메서드가 인스턴스에 속하지 않고 클래스에 속하기 때문입니다. 정적 메서드는 클래스가 메모리에 로딩될 때 생성되며, 인스턴스가 없어도 호출이 가능합니다. 그러나 인스턴스 메서드는 특정 인스턴스와 관련되어 있으며, 인스턴스가 존재해야만 호출이 가능합니다. 따라서 인스턴스가 없는 정적 컨텍스트에서는 인스턴스 메서드를 호출할 수 없습니다.

해당 내용에 대한 자세한 설명이 있는 강의 질문 및 답변 링크를 공유해 드리겠습니다:

강사님의 답변에 따르면, 인스턴스 메서드든 클래스 메서드든 JVM이 로드될 때 메서드 영역에 생성된다고 합니다. 그리고 인스턴스 메서드는 인스턴스 생성 시 메서드 영역에 만들어진 메서드를 연결해서 사용하는 것일 뿐입니다.

dongdong2님의 이해에 도움이 되었기를 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. dongdong2님

질문하신 것 처럼 정적 메서드는 메서드 영역에 생성되고, 인스턴스 메서드는 힙 영역에 생성된다고 이해하셔도 괜찮습니다.

실제로는 인스턴스 메서드든 클래스 메서드든 JVM이 로드될 때 메서드 영역에 생성됩니다. 그리고 인스턴스 메서드는 인스턴스 생성 시 메서드 영역에 만들어진 메서드를 연결해서 사용하는 것일 뿐입니다.

정적 메서드가 인스턴스 메서드를 사용할 수 없는 이유는, 정적 메서드는 개념상 클래스 소속입니다. 따라서 클래스에 있는 필드에만 접근할 수 있습니다.

반면에 인스턴스 메서드는 인스턴스에 있는 인스턴스 멤버 변수에 접근할 수 있습니다.

 

추가로 정적 메서드가 인스턴스 메서드를 사용한다면 클래스 소속의 정적 메서드는 하나만 존재합니다. 그런데 인스턴스 메서드는 여러개 존재할 수 있습니다. 그 중에 어떤 인스턴스 메서드를 사용해야 하는지도 애매하겠지요?

 

감사합니다.

dongdong2님의 프로필 이미지
dongdong2

작성한 질문수

질문하기