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
반응형
'☭DEVELOPER > #2 웹개발(자바기반 풀스택)' 카테고리의 다른 글
[BACKEND]코딩 테스트 7 (0) | 2023.08.30 |
---|---|
[BACKEND]JAVA_ECLIPSE23 예외 처리 (0) | 2023.08.29 |
[BACKEND]JAVA_ECLIPSE 코딩테스트6 (0) | 2023.08.29 |
[BACKEND]JAVA_ECLIPSE21 중첩 클래스와 중첩 인터페이스 (0) | 2023.08.28 |
[BACKEND]JAVA_ECLIPSE20 타입 변환과 다양성 (0) | 2023.08.28 |