package exam13;
public interface Calculator {
int add(int num1, int num2);
}
위 인터페이스를 객체화.
package exam13;
public class Outer {
public Calculator method(int num3) { //데이터 영역에 num3이 할당됨(상수)
Calculator cal = new Calculator() {
public int add(int num1, int num2) {
return num1 + num2 + num3;
}
};
return cal;
}
}
-데이터 (메서드) 영역
num3
바이트 코드
-스택 영역
cal 변수:
method 메서드 내에서 Calculator 인터페이스를 구현한 익명 내부 클래스의 인스턴스를 가리키는 참조 변수
-힙 영역
cal 객체: Calculator 인터페이스를 구현한 익명 내부 클래스의 인스턴스, add 메서드를 포함하고 있으며, num3 변수를 참조할 수 있다.
add메서드 실행과정
->
1. 함수가 호출되면 해당 함수의 코드가 실행
함수 내에서 사용되는 객체의 인스턴스는 힙 영역에 생성된다. 이 객체는 해당 클래스의 바이트코드를 가지고 있다.
함수 내에서 사용되는 메서드가 호출되면, 해당 메서드의 바이트코드는 메서드 영역에서 가져와서 해석 (메서드 테이블 은 힙영역에 존재하고 객체는 포인터를 통해 테이블에 접근하여 메서드에 접근할 수 있는 주소를 가져옴)
메서드의 실행 코드가 로딩되면, 그 코드는 해당 객체의 메서드를 참조하여 실행
이때 메서드는 함수 내에서 사용되는 객체의 데이터를 참조하여 원하는 동작을 수행