지역클래스
메서드 안에서도 클래스를 생성할 수 있다.
public class LocalOuter {
private int outInstanceVar = 3;
public void process(int paramVar){
int localVar = 1;
class LocalPrinter{
int value = 0;
public void print() {
System.out.println("value = "+ value);
System.out.println("localVar = "+localVar);
System.out.println("paramVar = "+paramVar);
System.out.println("outInstanceVar = "+outInstanceVar);
}
}
LocalPrinter printer = new LocalPrinter();
printer.printDate();
}
public static void main(String[] args) {
LocalOuter localOuter = new LocalOuter();
localOuter.process(2);
}
}
여기서 process() 메서드가 끝나면 지역변수 localVar와 매개변수 paramVar는 사라지게 되는데 출력이 잘 되는 것을 확인할 수 있다.
그 이유는 변수 캡처(Capture) 과정을 통해 지역 변수를 복사해서 생성한 인스턴스에 함께 넣어두기 때문에 사용할 수 있는것이다.
익명클래스
지역클래스 안에서는 익명클래스로 선언과 동시에 생성할 수 있다.
public void process(int paramVar){
int localVar = 1;
// 익명 클래스의 생성
Printer printer = new Printer() {
int value = 0;
@Override
public void print() {
System.out.println("value = " + value);
System.out.println("localVar = " + localVar);
System.out.println("paramVar = " + paramVar);
System.out.println("outInstanceVar = " + outInstanceVar);
}
}
printer.print();
System.out.println("printer.class = "+printer.getClass());
}
'JAVA' 카테고리의 다른 글
자바 예외 처리(Exception) (0) | 2024.09.27 |
---|---|
메서드 인수에 메서드 넣기 (0) | 2024.09.25 |
중첩, 내부클래스 (0) | 2024.09.24 |
열거형 - enum (0) | 2024.09.20 |
래퍼 클래스 (박싱, 언박싱) (0) | 2024.09.19 |