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

[BACKEND]JAVA_ECLIPSE22 익명 객체

조반짝 2023. 8. 29. 15:53
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
반응형