인스턴스 메서드와 클래스 메서드
271
작성한 질문수 2
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
클래스 메서드와 인스턴스 메서드 모두 메서드 영역에 존재한다고 하셨는데, 클래스 메서드는 인스턴스 생성 없이도 사용 가능하지만 인스턴스 메서드는 인스턴스 생성 없이는 사용이 불가능한 걸로 이해했습니다. 그럼 Java 내부적으로 같은 메서드 영역에 속한 클래스 메서드와 인스턴스 메서드를 어떻게 구분하여 클래스 메서드는 사용 가능하도록, 인스턴스 메서드는 사용 불가능하도록 처리하는 것인가요?
답변 2
0
안녕하세요. cpu님
Java에서 클래스 메서드(정적 메서드)와 인스턴스 메서드가 같은 메서드 영역(Method Area)에 속하면서도 서로 다르게 동작하는 이유는 다음과 같은 메커니즘에 의해서입니다.
메서드 영역
메서드 영역(Method Area)은 JVM이 로드한 클래스의 구조 정보를 저장하는 영역입니다. 이 영역에는 클래스 메서드(정적 메서드)와 인스턴스 메서드 모두가 포함됩니다. 그러나 이 둘은 다음과 같은 차이점이 있습니다.
클래스 메서드 (정적 메서드)
정적 메서드는
static키워드로 선언됩니다.클래스 수준에서 호출되며, 인스턴스 생성 없이도 사용 가능합니다.
클래스 로딩 시점에 메서드 영역에 로드됩니다.
메서드 호출 시, 인스턴스의 참조가 필요하지 않기 때문에
this키워드를 사용할 수 없습니다.
인스턴스 메서드
인스턴스 메서드는
static키워드 없이 선언됩니다.인스턴스 수준에서 호출되며, 반드시 인스턴스를 생성한 후에만 사용할 수 있습니다.
인스턴스 생성 시점에 인스턴스와 함께 메서드 영역에 로드됩니다.
메서드 호출 시, 해당 인스턴스의 참조가 필요하며,
this키워드를 통해 인스턴스의 필드와 다른 메서드에 접근할 수 있습니다.
내부 동작 메커니즘
클래스 로딩: JVM이 클래스를 로딩할 때, 클래스의 모든 메서드(정적 메서드와 인스턴스 메서드 포함)가 메서드 영역에 로드됩니다.
정적 메서드 호출: 정적 메서드는 클래스 이름을 통해 호출됩니다. 호출 시에는 인스턴스 참조가 필요 없으므로, JVM은 단순히 메서드 영역에서 해당 메서드를 찾아 실행합니다.
MyClass.myStaticMethod();인스턴스 메서드 호출: 인스턴스 메서드는 인스턴스를 통해 호출됩니다. 호출 시 JVM은 해당 인스턴스의 참조를 전달받아 메서드 영역에서 메서드를 찾고, 인스턴스 참조(
this)와 함께 메서드를 실행합니다.MyClass myObject = new MyClass(); myObject.myInstanceMethod();
메서드 호출 시 JVM의 처리 과정
정적 메서드 호출 시: JVM은 메서드 영역에서 해당 메서드를 바로 찾아 실행합니다. 인스턴스 참조가 없기 때문에
this키워드를 사용할 수 없습니다.인스턴스 메서드 호출 시: JVM은 해당 인스턴스의 참조를 기반으로 메서드 영역에서 메서드를 찾아 실행합니다. 이 때, 인스턴스 참조는
this키워드로 전달됩니다.
이러한 메커니즘을 통해 JVM은 클래스 메서드와 인스턴스 메서드를 구분하여 처리합니다. 클래스 메서드는 인스턴스 생성 없이도 호출 가능하며, 인스턴스 메서드는 반드시 인스턴스를 통해서만 호출될 수 있도록 설계되어 있습니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
cpu님의 질문과 관련된 내용이 제공된 정보에는 없습니다. 학습에 관련된 다른 질문이 있으시면 언제든지 도움을 드릴 수 있도록 노력하겠습니다. 인프런의 강의 관련 질문이나 특정 프로그래밍 개념에 대한 궁금증이 있으시면, 자세한 내용과 함께 질문해 주세요.
질문있습니다
0
28
1
1번 문제 질문입니다.
0
33
1
음악플레이어 문제 중 코드질문
0
27
1
9장 상속 문제와 풀이 질문
0
38
1
강의 자료에 사소한 오타가 있습니다.
0
50
2
매서드 참조값 반환??
0
66
1
접근제어자 - 쇼핑카트 문제에서 상품출력 부분 메서드
0
70
1
자바 기본편 - .(dot)에 관한 질문입니다!
0
85
1
공부방법
0
76
2
상속관계에서 멤버 변수는 오버라이딩 되는 개념이 아닌가요?
0
82
1
static method 질문
0
66
1
캡슐화 문제풀이 ShoppingCart 요구사항에 문제가 있어보입니다. 피드백 주세요
0
97
1
Method1에서 Student 객체
0
74
1
3강 18. null 질문
0
69
1
this 와 super의 호출 순서는 부모-자식관계 떄문만인가요?
0
75
1
팩토리 메서드 패턴과 일반 생성자 사용의 장단점
0
97
1
문의
0
104
1
9장 상속 문제와 풀이 부분 궁금한게 있어서 질문드립니다
0
90
1
상속과 그에 따른 메모리 구조 질문
0
62
1
call메소드에서 멤버에 접근하는 방식을 이해 못 했습니다
0
74
1
수강기한
0
136
1
기본편 객체지향 프로그래밍에 대한 정의
0
87
1
섹션10 상속 메모리 구조 및 문제 관련 질문
0
87
1
추가 지식 학습
0
153
2





