개발공부/JAVA
[JAVA] 익명 객체
jnnjnn
2024. 3. 12. 17:35
선행 학습
2024.03.12 - [개발공부/JAVA] - [JAVA] 중첩 선언(중첩 클래스, 중첩 인터페이스)
[JAVA] 중첩 선언(중첩 클래스, 중첩 인터페이스)
중첩클래스 클래스 내부에 선언하는 클래스를 중첩클래스라 한다. 중첩 클래스가 여러 클래스와 관계를 맺는 것이 아닌 특정 클래스만 관계를 맺을 경우에는 해당 클래스의 중첩 클래스로 선언
abc-datatype.tistory.com
익명 객체란?
익명 객체는 이름이 없는 객체를 말한다. 명시적으로 클래스를 선언하지 않고 객체를 생성하기 때문에 주로 필드값, 로컬 변수값, 매개변수값으로 사용된다
public class C01AnonymousClass {
// 익명클래스의 객체
C01MyClass obj = new C01MyClass() {
};
}
abstract class C01MyClass {
}
익명 객체는 클래스를 상속하거나 인터페이스를 구현해야만 생성할 수 있다.
익명 객체에는 클래스를 상속받은 익명 자식 객체와 인터페이스를 구현한 익명 구현 객체가 있다.
익명 자식 객체와 익명 구현 객체는 거의 유사하지만 익명 구현 객체는 반드시 인터페이스의 추상 메소드를 재정의해주어야 한다는 점에서 다르다.
단 하나의 추상 메소드를 가진 인터페이스의 익명 구현 객체는 람다식으로 표현 가능하다
interface RemoteControl {
void turnOn();
void turnOff();
}
class Home {
// 필드에 익명 구현 객체 대입
private RemoteControl rc = new RemoteControl() {
@Override
public void turnOn() {
System.out.println("TV를 켭니다");
}
@Override
public void turnOff() {
System.out.println("TV를 끕니다");
}
};
// 필드에 대입된 익명 구현 객체 사용
public void use1() {
rc.turnOn();
rc.turnOff();
}
public void use2() {
// 로컬 변수에 익명 객체 대입
RemoteControl rc = new RemoteControl() {
@Override
public void turnOn() {
System.out.println("에어컨을 켭니다");
}
@Override
public void turnOff() {
System.out.println("에어컨을 끕니다");
}
};
rc.turnOn();
rc.turnOff();
}
// 익명 구현 객체를 매개변수로 받을 수 있는 메소드
public void use3(RemoteControl rc) {
rc.turnOn();
rc.turnOff();
}
}
public class HomeExample {
public static void main(String[] args) {
Home home = new Home();
// 필드 사용
home.use1();
// 로컬 변수 사용
home.use2();
// 매개변수로 익명 구현 객체 대입
home.use3(new RemoteControl() {
@Override
public void turnOn() {
System.out.println("난방을 켭니다");
}
@Override
public void turnOff() {
System.out.println("난방을 끕니다");
}
});
}
}