본문 바로가기
☭DEVELOPER/#2 웹개발(자바기반 풀스택)

[BACKEND]JAVA_ECLIPSE22 익명 객체

by 조반짝 2023. 8. 29.
728x90
반응형

Annonymous 익명 객체

이름없는 객체, 어떤 클래스를 상속하거나 인터페이스를 구현해야한다.

일반 상속과 형식이 다름, 중괄호 안에 내용이 중요하다.

부모클래스에 매개값에 해당되는 구문(중괄호) 필드 메소드를 사용하여 편리하게 새용할 수 있다.

부모클래스 [필드| 변수] = new 부모클래스(매개값,...) {
	//필드
	//메소드
};


부모클래스 person.java

 

익명 자식 객체 생성 Anonymous.java

 

 

AnonymousExample 실행클래스

 

 



인터페이스

package chapter09.sec02.exam02;

// 두개의 추상 메서드를 갖는 Remotecontrol 인터페이스를 소스 코딩합니다!
public interface RemoteControl {

	public void turnOn();
	public void turnOff();
}

 

익명구현 생성

package chapter09.sec02.exam02;

// 익명 구현 객체를 생성하는 Anonymous 클래스 소스 코딩입니다.
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 사용
		localVar.turnOn();
	}
	
	void method2(RemoteControl rc) {
		rc.turnOn();
	}
}

AnonymousExample 실행 클래스

package chapter09.sec02.exam02;

// 앞서 생성한 클래스들을 활용하여, 
// 익명 구현 객체 생성 AnonymousExample 실행 클래스를 소스 코딩합니다.
public class AnonymousExample {
	
	public static void main(String[] args) {
		
		Anonymous anony = new Anonymous();
		
		//익명 객체 필드 사용
		anony.field.turnOn(); // TV를 켭니다!
		// 익명 객체 로컬 변수 사용
		anony.method1(); //Audio를 켭니다!
		// 익명 객체 매개값 사용
		anony.method2(
				
			// 매개값 활용
			new RemoteControl() {
			
			
			@Override
			public void turnOn() {
				System.out.println("Smart TV를 켭니다!");
			}
			
			@Override
			public void turnOff() {
				System.out.println("Smart TV를 끕니다!");
				
			}
		});  //Smart TV를 켭니다!
	}

}

UI 클래스

package chapter09.sec02.exam03;

import chapter09.sec02.exam03.Button.onClickListener;

//중요!!! 다음은 윈도우 및 안드로이드 등의 UI 프로그램에서 버튼의 클릭이벤트를
//       처리하기 위해 익명 구현 객체를 이용하는 방법을 보여줍니다.
//       우선 UI 클래스로 활용할 Button 객체를 소스 코딩합니다.
public class Button {

	// 중첩 인터페이스 onClickListener 선언
	public interface onClickListener {
		void onClick();

	}

	onClickListener listener; // 인터페이스 타입 필드 선언
	
	// 매개변수의 다형성 활용
	public void setonClickListener(onClickListener listener) {
		this.listener = listener;
	}
	
	void touch() {
		listener.onClick(); // 구현객체의 onClick() 메서드 호출

	}
}

ui 클래스 window

 

package chapter09.sec02.exam03;

// 다음 Window 클래스를 2개의 Button 객체를 가지고 있는 창이라고 가정해봅니다.
// 첫번째 button1의 클릭 이벤트 처리는 필드로 선언한 익명 구현 객체가 담당하고,
// 첫번째 button2의 클릭 이벤트 처리는 setOnClickListener()를 호출할 때
// 매개값으로 준 익명 구현 객체가 담당하도록 합니다.
// UI 클래스 Window를 소스 코딩합니다.
public class Window {

	Button button1 = new Button();
	Button button2 = new Button();
	
	// 필드 초기값으로 대입 : 필드값으로 익명 객체 대입
	Button.onClickListener listener = new Button.onClickListener() {
		
		@Override
		public void onClick() {
			System.out.println("전화를 겁니다!");
		}
	};
	
	public Window() {
		button1.setonClickListener(listener); // 매개값을 필드 대입
	
		// 매개값으로 익명 객체 대입
		button2.setonClickListener(new Button.onClickListener() {
			
			@Override
			public void onClick() {
				System.out.println("메시지를 보냅니다!");
			}
		});
	}
}

실행클래스 main

package chapter09.sec02.exam03;

// Main 실행 클래스를 소스 코딩합니다
public class Main {
	
	public static void main(String[] args) {
		
		Window window = new Window();
		window.button1.touch();  //전화를 겁니다!
		window.button2.touch();  //메시지를 보냅니다!
	}

}

인터페이스 Calculator

package chapter09.sec02.exam04;

// Calculator 인터페이스를 소스 코딩합니다.
// 매개 변수와 로컬 변수가 final 특성을 갖고 있음을 보여줍니다.
// Calculator 인터페이스를 소스 코딩합니다.

public interface Calculator {
	
	// 추상 메서드 sum() 선언
	public int sum();

}

익명객체의 로컬 변수사용 Anonymous

package chapter09.sec02.exam04;

// 익명 객체의 로컬 변수 사용
public class Anonymous {

	private int field;
	
	public void method(final int arg1, final int arg2) {
		final int var1 = 0;
		final int var2 = 0;
		
		field = 10;
		
//		arg1 = 20;
//		arg2 = 20;
		
//		var1 = 30;
//		var2 = 30;
	
		Calculator calc = new Calculator() {
			
			@Override
			public int sum() {
				int result = field + arg1 + arg2 + var1 + var2;
				return result;
			}
		};
		System.out.println(calc.sum());
	}
}

익명 객체의 로컬 변수 사용 , 실행클래스

package chapter09.sec02.exam04;

// 익명 객체의 로컬 변수 사용 AnonymousExample 실행 클래스를 소스 코딩합니다.
public class AnonymousExample {

	public static void main(String[] args) {
		Anonymous anony = new Anonymous();
		anony.method(0, 0); //10
	}
}

 

 

 

728x90
반응형