반응형
익명 구현 객체 생성
인터페이스 타입으로 필드나 변수를 선언하고, 구현 객체를 초기값으로 대입하는 경우를 생각해보자.
구현 클래스를 선언하고, new 연산자를 이용해서 구현 객체를 생성한 후, 필드나 로컬 변수에 대입하는 것이 기본이다.
class TV implements RemoteControl { }
class A{
RemoteControl field = new TV();
void method(){
RemoteControl localVar = new TV();
}
}
그러나 구현 클래스가 재사용되지 않고, 오로지 해당 필드와 변수의 초기값으로만 사용하는 경우라면 익명 구현 객체를 초기값으로 대입하는 것이 좋다.
인터페이스 [필드|변수] = new 인터페이스("매개값", "..."){
// 인터페이스에 선언된 추상 메소드의 실체 메소드 선언
// 필드
// 메소드
};
RemoteControl.java
public interface RemoteControl {
public void turnOn();
public void turnOff();
}
Anonymous.java
package anonymous.anonyInterface;
public class Anonymous {
// 필드 초기값으로 대입
RemoteControl field = new RemoteControl() {
@Override
public void turnOn() {
System.out.println("TV를 켭니다.");
}
@Override
public void turnOff() {
System.out.println("TV를 끕니다.");
}
};
void method1(){
RemoteControl localVar = new RemoteControl() {
@Override
public void turnOn() {
System.out.println("Audio를 켭니다.");
}
@Override
public void turnOff() {
System.out.println("Audio를 끕니다.");
}
};
// 로컬변수 사용
localVar.turnOn();
}
void method2(RemoteControl rc){
rc.turnOn();
}
}
AnonymousExample.java
package anonymous.anonyInterface;
public class AnonymousExample {
public static void main(String[] args) {
Anonymous anony = new Anonymous();
// 익명 객체 필드 사용
anony.field.turnOn();
// 익명 객체 로컬 변수 사용
anony.method1();
// 익명 객체 매개값 사용
anony.method2(new RemoteControl() {
@Override
public void turnOn() {
System.out.println("smart TV를 켭니다.");
}
@Override
public void turnOff() {
System.out.println("smart TV를 끕니다.");
}
});
}
}
TV를 켭니다.
Audio를 켭니다.
smart TV를 켭니다.
반응형
'프로그래밍 노트 > JAVA' 카테고리의 다른 글
[JAVA] Stream API 소개 (0) | 2019.06.17 |
---|---|
[JAVA] String 객체와 리터럴 (메모리관련) (2) | 2019.04.23 |
[JAVA] 익명객체_익명 자식 객체 생성 (0) | 2019.04.15 |
[JAVA] 람다식 클래스 멤버와 로컬 변수 사용 (0) | 2019.04.15 |
[JAVA] 람다식 함수적 인터페이스 (0) | 2019.04.02 |