Recent Posts
Recent Comments
Link
11-22 00:01
Today
Total
관리 메뉴

삶 가운데 남긴 기록 AACII.TISTORY.COM

익명 객체 본문

DEV&OPS/Java

익명 객체

ALEPH.GEM 2022. 4. 5. 15:50

익명 객체

익명 객체는 이름이 없는 객체를 말합니다.

단독으로 생성할 수 없고 클래스를 상속하거나 인터페이스를 구현해야 생성할 수 있습니다.

보통 UI이벤트 처리 객체나 스레드 객체를 간편하게 생성할 목적으로 활용합니다.

public class Person {
	void wake() {
		System.out.println("일어납니다.");
	}
}
public class Anonymous {
	Person field = new Person() {
		void work() {
			System.out.println("출근합니다.");
		}
		void wake() {
			System.out.println("6시에 일어납니다.");
			work();
		}
	};
	
	void method1() {
		Person localVar = new Person() {
			void walk() {
				System.out.println("걸어갑니다.");
			}
			void wake() {
				System.out.println("7시에 일어납니다.");
			}
		};
		
		localVar.wake();
	}
	
	void method2(Person person) {
		person.wake();
	}
}
public class AnonymousEx {
	public static void main(String[] args) {
		Anonymous anony = new Anonymous();
		//익명 객체 필드 사용
		anony.field.wake();
		//익명 객체 로컬 변수 사용
		anony.method1();
		//익명 객체 인수 사용
		anony.method2(new Person() {
			void study() {
				System.out.println("공부합니다.");
			}
			void wake() {
				System.out.println("8시에 일어납니다.");
				study();
			}
		});
	}
}

실행결과

6시에 일어납니다.
출근합니다.
7시에 일어납니다.
8시에 일어납니다.
공부합니다.

 

인터페이스 구현 익명 객체

public interface RemoteControl2 {
	public void turnOn();
	public void turnOff();
}
public class Anonymous2 {
	RemoteControl2 field = new RemoteControl2() {

		@Override
		public void turnOn() {
			System.out.println("켭니다.");			
		}

		@Override
		public void turnOff() {
			System.out.println("끕니다.");
		}
		
	};
	
	void method1() {
		RemoteControl2 localVar = new RemoteControl2() {

			@Override
			public void turnOn() {
				System.out.println("오디오를 켭니다.");
			}

			@Override
			public void turnOff() {
				System.out.println("오디오를 끕니다.");
			}
			
		};
		
		localVar.turnOn();
	}
	
	void method2(RemoteControl2 rc) {
		rc.turnOn();
	}
	
}
public class AnonymousEx2 {
	public static void main(String[] args) {
		Anonymous2 anony = new Anonymous2();
		anony.field.turnOn();
		anony.method1();
		anony.method2(new RemoteControl2() {

			@Override
			public void turnOn() {
				System.out.println("TV를 켭니다.");
			}

			@Override
			public void turnOff() {
				System.out.println("TV를 끕니다.");
			}
			
		});
	}
}

실행 결과

켭니다.
오디오를 켭니다.
TV를 켭니다.

 

 

 

 

 

 

 

728x90

'DEV&OPS > Java' 카테고리의 다른 글

자바 API , Object 클래스  (0) 2022.04.07
예외 처리  (0) 2022.04.06
중첩 클래스 중첩 인터페이스  (0) 2022.04.05
추상 클래스와 인터페이스  (0) 2022.03.31
자바 클래스와 메서드  (0) 2022.03.28