본문 바로가기
My Image
프로그래밍/Java

[Java] 익명 구현 클래스(익명 구현 객체)

by Lim-Ky 2021. 12. 13.
반응형

 

안녕하세요~ 오늘은 지난 시간에 이어, 익명클래스(익명객체)에 대해서 알아보겠습니다.

지난번 글 : 2021.12.10 - [프로그래밍/Java] - [Java] 익명객체(익명클래스)란? (이 글 하나로 한방에 정리!)

지난 시간에는 익명클래스(익명객체)에 대한 기본적인 정의와 목적에 대해서 알아봤었고, 상속관계에 있어서 익명클래스(익명객체)를 설명했었습니다. 이번 시간은 인터페이스를 기반으로 익명객체를 어떻게 사용하지 알아보겠습니다.

 

익명 구현 클래스(익명 구현 객체)란?

익명 구현 클래스(익명 구현 객체)란 무엇일까요? 이름에서 부터 눈치채셨겠지만 구현(implements) 이란 단어는 인터페이스(interface)와 연관되어있습니다. 즉, 인터페이스를 바탕으로 익명클래스(익명객체)를 구현할 수 있습니다.

지난시간에 익명객체는 이벤트UI에 많이 활용된다고 했습니다. 보통 클래스 내부에 중첩인터페이스를 정의하고, 해당 클래스를 익명클래스(익명객체)로 정의할때 중접인터페이스에서 강제적으로 정의해서 사용해야하는 메소드를 익명클래스 정의시점에 정의하여 사용하면 됩니다. 일반 상속 익명 객체와 다른 점은 상속과 다르게 인터페이스는 강제적으로 무조건 정의를 통해 사용해야하는 메서드가 있기 때문에, 규격화에 도움이 됩니다.

 

소스를 보겠습니다. ('이것이 자바다' 책 예제 발췌 및 변형)

package Anonymous;

public class Button {
	//인터페이스 타입 필드
	OnClickListener listener;
	
	//메개변수의 다형성
	void setOnClickListener(OnClickListener listener){
		this.listener = listener;
	}
	
	//구현 객체의 onClick() 메서드 호출
	void touch(){
		listener.onClick();
	}
	
	//중첩 인터페이스
	interface OnClickListener{
		void onClick();
	}
	
}

Button 클래스 내부에 OnClickListener 중첩인터페이스 정의

setOnClickListener 메서드를 통해, OnClickListener 인터페이스 세팅

touch 메서드를 통해, 익명 구현 객체를 통해 정의된 OnClickListener 의 onClick 메서드 호출

 

package Anonymous;

public class ButtonHandler {

	Button endButton = new Button();
	Button startButton = new Button();
	
    //클래스 필드 객체 생성과 동시에 익명 구현객체 할당
	Button.OnClickListener listener = new Button.OnClickListener() {
		@Override
		public void onClick() {
			System.out.println("프로그램을 종료합니다.");
			
		}
	};
	
	ButtonHandler(){
		
        //위 필드에서 생성한 익명 구현객체로 endButton listener setting
		endButton.setOnClickListener(listener);
		
        //startButton listener setting하는 메서드 호출과 동시에 익명 구현객체 정의
		startButton.setOnClickListener(new Button.OnClickListener() {
			@Override
			public void onClick() {
				System.out.println("프로그램을 시작합니다.");
				
			}
		});
		
	}
	
}

 

endButton 객체 생성 (프로그램 종료 용도 버튼)

startButton 객체 생성 (프로그램 시작 용도 버튼)

클래스 필드에 listener 객체 생성과 동시에 익명 구현객체 할당, 나중에 listener 익명 구현 객체는 endButton에 listener로 setting, 반면 startButton 은 setOnClickListener 메소드 호출과 동시에 listener 익명 구현 객체를 정의하여 setting 처리

 

package Anonymous;

public class AnonymousExample {

	public static void main(String[] args) {
		ButtonHandler buttonHandler = new ButtonHandler();
		buttonHandler.endButton.touch();
		buttonHandler.startButton.touch();
	}

}

결과

프로그램을 종료합니다.
프로그램을 시작합니다.

 

익명 구현 객체를 정의받은 ButtonHandler 객체 생성

buttonHandler의 각 버튼객체 접근 후 touch() 메서드 호출 (listener 익명 구현 객체 정의시 정의(구현)된 onClick 메서드 호출)

반응형

댓글