• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

자바 메모리 관련 질문

24.06.08 13:44 작성 조회수 116

0

메서드 영역은

  1. 클래스 정보

  2. static 영역

  3. 런타임 상수 풀

이렇게 세가지로 구성되어 있는걸로 알고 있습니다.

  1. static 메서드와 그냥 메서드 둘다 클래스 정보에 저장되는게 맞지만, 둘의 차이는 참조값(인스턴스) 없이 호출 가능하느냐, 아니냐의 차이가 맞을까요?

  2. 만약 아니고 static 메서드는 static 영역에 저장된다고 한다면, static 영역에 있기 때문에 static 메서드는 참조값 없이 호출 가능한것 인가요?

답변 2

·

답변을 작성해보세요.

1

안녕하세요. 공희배님

  1. 네 맞습니다 🙂

조금 더 보충하자면

  • Static 메서드와 인스턴스 메서드는 모두 클래스 정보의 일부로 메서드 영역에 저장됩니다.

  • Static 메서드는 클래스의 인스턴스 없이 클래스 이름으로 직접 호출할 수 있습니다.

  • 인스턴스 메서드는 특정 객체의 상태에 따라 동작하므로 해당 객체를 생성한 후 참조값을 통해 호출해야 합니다.

감사합니다.

공희배님의 프로필

공희배

질문자

2024.06.13

친절한 설명 감사합니다 ! 이해되었습니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.06.08

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

공희배님의 자바 메모리 구조와 관련한 질문에 대해 답변 드립니다.

  1. static 메서드와 인스턴스 메서드의 저장 위치와 차이:
    먼저, static 메서드와 인스턴스 메서드 모두 클래스 정보가 메서드 영역(Method Area)에 로드될 때 같이 저장됩니다. 차이점은 호출 방법에 있습니다. static 메서드는 클래스에 속해 있기에 클래스명만으로 직접 호출이 가능합니다. 반면, 인스턴스 메서드는 특정 객체가 생성되어야만 그 객체를 통해 호출을 할 수 있죠. 따라서, 여러분이 질문하신 대로 차이는 메서드 호출 시 참조값(인스턴스)의 필요 유무에 있습니다.

  2. static 메서드의 호출 가능성:
    static 메서드는 클래스가 로드될 때 메서드 영역에 저장되기 때문에, 프로그램 어디에서든 해당 클래스 이름으로 직접 접근하여 호출할 수 있습니다. 이는 인스턴스를 생성하지 않고도 사용할 수 있다는 의미이며, 따라서 “static 영역에 저장되기 때문에 참조값 없이 호출 가능하다”라는 말은 어느 정도 정확합니다.

질문하신 내용에 대해 비슷한 다른 질문들이 몇 가지 있어 참고하실 수 있도록 링크를 제공해 드립니다.

자바 메모리 구조 및 static 메서드와 관련해 기본적으로 메서드 영역에 모든 클래스 정보와 static 변수, 메소드 등이 저장된다는 사실이 중요합니다. 참조형 변수 및 인스턴스 필드는 힙 영역에 저장되며, 인스턴스 메서드의 호출에는 특정 객체가 필요하지만, static 메서드는 어느 곳에서든 직접 호출이 가능합니다.

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

채널톡 아이콘