익명 클래스 ( Anonymous Class )
>> 익명 클래스는 이름이 없는 클래스를 말한다. 클래스 정의와 동시에 객체를 생성할 수 있다.
class A{
}
interface ITemp<X> {
public X getData();
}
public class Main{
public static void main( String[] args ){
A t = new A(){};
System.out.println( t.toString() );
ITemp<Integer> it = new ITemp<Integer>(){
public Integer getData(){ return 100; }
};
int j = it.getData();
System.out.println( j );
}
}
위 코드에서 아래 부분을 보면,
A t = new A(){};
ITemp<Integer> it = new ITemp<Integer>(){};
- new A(){} : A 클래스를 상속받는 이름없는 클래스를 선언하면서 동시에 그 인스턴스를 생성하고 있다.
- ITemp<Integer> it = new ITemp<Integer>(){}; : ITemp 인터페이스를 상속받는 이름없는 클래스를 선언하면서 동시에 그 인스턴스를 생성하고 있다.
- 조상으로부터 상속받지만, 클래스를 선언하는데 이름이 없다. : 재사용이 불가능한 1회용 클래스라는 뜻이다.
- 주로 인터페이스와 연동하여 쓰일 때가 많다.
[ 인터페이스와 어나니머스클래스를 활용한 콜백( CallBack ) 함수 ]
- 피호출자(Callee)가 호출자(Caller)를 다시 호출하는 것
- 비동기적 처리를 하기 위한 디자인 패턴의 종류
// callback 인터페이스 생성
interface ICallback{
public void onEvent( int i );
}
// 피호출자 Calle
class Button{
public void onClick( ICallback cb ){
System.out.println( "onClick...");
if ( cb != null ){
cb.onEvent( 100 );
}
}
}
// 호출자 Caller
public class Main{
public static void main(String[] args){
Button btn = new Button();
btn.onClick( new ICallback(){
public void onEvent( int i ){
System.out.println("onEvent XX" + i );
}
});
}
}
'JAVA > 정리한 것' 카테고리의 다른 글
| [ JAVA ] class.forName() (0) | 2022.05.18 |
|---|---|
| [ JAVA ] 정적( Static ) (0) | 2022.05.16 |
| [ JAVA ] 제너릭( Generic ) (0) | 2022.05.16 |
| [ JAVA ] Abstract 와 Interface (0) | 2022.05.15 |
| [ JAVA ] 객체지향언어의 특징 - 캡슐화 (0) | 2022.05.15 |