JAVA/정리한 것

[ JAVA ] 익명 클래스 ( Anonymous Class )

따갓 2022. 5. 16. 23:14

익명 클래스 ( 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 ) 함수 ]

  1. 피호출자(Callee)가 호출자(Caller)를 다시 호출하는 것
  2. 비동기적 처리를 하기 위한 디자인 패턴의 종류
// 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