익명 클래스(Anonymous Class) 는 지역 클래스의 특별한 종류의 하나다. 클래스의 이름이 없다는 특징이 있다.
✅ 선언과 생성을 동시에 처리한다
✅ 부모 클래스를 상속 받거나, 또는 인터페이스를 구현해야한다
익명 클래스는 이름이 없는 클래스로, 주로 단 한 번만 사용되는 클래스나 인터페이스를 구현할 때 사용된다.
package nested.anonymous;
import nested.local.Printer;
public class AnonymousOuter {
private int outInstanceVar = 3;
public void process(int paramVar) {
int localVar = 1;
Printer printer1 = 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);
}
}; // 익명 클래스의 블록 뒤에는 ; 를 붙여야 한다.
printer1.print();
}
public static void main(String[] args) {
AnonymousOuter localOuter = new AnonymousOuter();
localOuter.process(2);
}
}
Printer printer1 = new Printer() { ... }; ➡️ 익명 클래스
‼️ 자바에서 하나의 문장은 누가(대상) , 무엇을 한다(행동) 는 구조를 가진다고 볼 수 있다. 위의 익명 클래스는 객체인 toy 가 new MyToy() {...} 의 행동을 한다. 즉 완전한 하나의 문장인 것이다.
블록 뒤에 세미콜론(;) 이 왜 붙는걸까 ?
자바에서 세미콜론(;) 은 "하나의 문장이 끝났다" 는 표시다. 일반 블록에서는 단순히 여러 문장을 묶는 역할이기 때문에 세미콜론이 필요 없지만, 익명 클래스의 블록은 단순한 묶음이 아니라 객체를 생성하는 new 표현식의 일부다. 그 전체가 하나의 문장이라는 뜻이다.