삶 가운데 남긴 기록 AACII.TISTORY.COM
익명 객체 본문
익명 객체
익명 객체는 이름이 없는 객체를 말합니다.
단독으로 생성할 수 없고 클래스를 상속하거나 인터페이스를 구현해야 생성할 수 있습니다.
보통 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 | 
| 중첩 클래스 중첩 인터페이스 (2) | 2022.04.05 | 
| 추상 클래스와 인터페이스 (0) | 2022.03.31 | 
| 자바 클래스와 메서드 (0) | 2022.03.28 | 
