12.7 익명 객체 (Anonymous Object)
1. 이름 없는 영웅 🎭
익명(Anonymous) 객체는 말 그대로 “이름이 없는 객체”입니다.
보통 클래스를 만들 때는 이름을 지어주지만(class Dog), 딱 한 번만 쓰고 버릴 객체라면 굳이 이름을 지어줄 필요가 없습니다.
- 특징: 클래스 선언과 동시에 객체를 생성합니다.
- 장점: 코드가 줄어들고, 특정 위치에서만 동작을 재정의해서 쓰기 좋습니다.
2. 문법 해부 (상속 + 생성)
익명 객체를 만드는 문법은 처음 보면 조금 낯설 수 있습니다.
“나는 Parent를 상속받지만, 내 클래스 이름은 짓지 않고 본문({})만 정의하겠다”는 뜻입니다.
// 변수에 대입하거나
Parent p = new Parent() {
// Parent의 내용을 여기서 바로 수정(Override)해서 씀!
}; // <- 세미콜론 필수!
3. 사용 예시 1: 익명 자식 객체 (상속)
부모 클래스(Tire)가 있는데, 특정 상황에서만 굴러가는 방식(roll)을 바꾸고 싶을 때 사용합니다.
public class Car {
public void run() {
// 일반 타이어
Tire tire = new Tire();
tire.roll();
// 익명 자식 타이어 (이름 없음, 즉석 튜닝)
Tire specialTire = new Tire() {
@Override
public void roll() {
System.out.println("🛞 스노우 타이어로 굴러갑니다!");
}
};
specialTire.roll();
}
}
4. 사용 예시 2: 익명 구현 객체 (인터페이스)
가장 많이 쓰이는 형태입니다. 인터페이스(RemoteControl)를 구현한 클래스 파일을 따로 만들지 않고, 즉석에서 구현해버립니다.
public class User {
public static void main(String[] args) {
// 인터페이스를 바로 new? (파격적!)
// 사실은 인터페이스를 구현한 '이름 없는 클래스'를 만들어서 new 하는 것.
RemoteControl rc = new RemoteControl() {
@Override
public void turnOn() {
System.out.println("📺 TV를 켭니다.");
}
@Override
public void turnOff() {
System.out.println("📺 TV를 끕니다.");
}
};
rc.turnOn();
}
}
핵심 요약: 익명 객체는 “일회용 구현 클래스”입니다. 이벤트 처리(버튼 클릭 등)처럼 한 번만 정의해서 쓰는 곳에 아주 유용합니다!
서브목차