본문 바로가기
JAVA

지역클래스, 익명클래스

by 우영11 2024. 9. 24.

지역클래스

메서드 안에서도 클래스를 생성할 수 있다.

 

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