메서드 재정의와 가상 메서드 원리
메서드는 어떻게 호출되고 실행 되는가?
- 메서드(함수)의 이름은 주소값을 나타냄.
- 메서드는 명령어의 set 이고 프로그램이 로드되면 메서드 영역(코드 영역)에 명령어 set이 위치.
- 해당 메서드가 호출 되면 명령어 set 이 있는 주소를 찾아 명령어가 실행됨.
- 이때 메서드에서 사용하는 변수들은 스택 메모리에 위치 하게됨.
- 따라서 다른 인스턴스라도 같은 메서드의 코드는 같으므로 같은 메서드가 호출됨.
- 인스턴스가 생성되면 변수는 힙 메모리에 따로 생성되지만, 메서드 명령어 set은 처음 한번만 로드 됨.
public class TestMethod {
int num;
void aaa() {
System.out.println("aaa() 호출");
}
public static void main(String[] args) {
TestMethod a1 = new TestMethod();
a1.aaa();
TestMethod a2 = new TestMethod();
a2.aaa();
}
}
가상 메서드의 원리
- 가상 메서드 테이블(vitual method table)에서 해당 메서드에 대한 address를 가지고 있음.
- 재정의된 경우는 재정의 된 메서드의 주소를 가리킴.
- vc는 VIPCustomer 인스턴스 이다.
- vc의 calcPrice 메서드는 오버라이딩 되어 메서드 영역에 새로 할당 됨.
- vc.calcPrice()는 VIPCustomer 인스턴스이고, 오버라이딩 된 메서드이므로 해당 메서드 주소를 참조.
Author And Source
이 문제에 관하여(메서드 재정의와 가상 메서드 원리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@tmdwns1101/메서드-재정의와-가상-메서드-원리저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)