1. 익명 구현 객체
- 보통 인터페이스, 구현 클래스, Main에서 구현 클래스의 객체를 써서 메소드를 호출하지만,
일회성의 구현 객체를 위해 소스 파일을 만들고 클래스를 선언하는것은 비효율적이다.
- 따라서 소스 파일을 만들지 않고도 구현 객체를 만들 수 있는 방법을 제공하는데, 이것이 익명 구현 객체이다.
2. 익명 구현 객체 용도
- UI프로그래밍 이벤트 처리
- 임시 작업 스레드 간편 생성
3. 람다식 사용
- 람다식은 인터페이스의 익명 구현 객체를 만든다.
4. 람다식
- 메소드를 하나의 "식"으로 표현한 것.
- 함수를 따로 정의하지않고 한 줄에 함수를 써서 그것을 호출하는 방식.
- 메소드를 람다식으로 표현하면 메소드의 이름과 반환값이 없어지므로 람다식을 "익명함수"라고도 한다.
- 모든 메소드는 클래스 생성 -> 객체 생성 -> 메소드 호출순으로 해야 사용할 수 있지만,
람다식 자체만으로도 메소드 역할을 수행할 수 있다.
- 람다식은 메소드의 매개변수로 전달되어지는 것이 가능하다.
5. 익명 구현 객체 생성 예시
인터페이스 변수 = new 인터페이스()
{
// 인터페이스에 선언된 추상 메소드의 실체 메소드 선언
};
*인터페이스*
package Hyunndy_Toy_Package;
public interface HyunndyInt {
int MAX_AGE = 20;
void EatSomething();
}
Main에서의 익명 구현 객체 생성
package Hyunndy_Toy_Package;
public class Hyunndy{
public static void main(String[] args)
{
// 인터페이스 변수 = new 인터페이스()
HyunndyInt rc = new HyunndyInt()
{
// 인터페이스의 추상 메소드의 실체 선언
public void EatSomething()
{
System.out.println("아아악");
}
};
rc.EatSomething();
}
}
6. 자바 컴파일러
- 모든 객체는 클래스로부터 생성되고, 익명 구현 객체 또한 그렇다.
- 따라서 위의 코드를 컴파일하면 자동으로 클래스 파일이 생성된다.
7. 익명 자식 객체 생성 ~클래스~
7-1) 익명 객체 필드 사용
7-2) 익명 객체 로컬 변수 사용
7-3) 익명 객체 매개값 사용
*부모클래스*
package Hyunndy_Toy_Package;
public class Sara{
void wake()
{
System.out.println("7시에 일어납니다.");
}
}
*익명 자식 객체 생성*
package Hyunndy_Toy_Package;
public class Hyunndy{
/* 필드 선언과 초기값 대입*/
Sara Sara1= new Sara() {
void work()
{
System.out.println("출근합니다.");
}
//override
void wake()
{
System.out.println("6시에 일어납니다.");
work();
}
};
void method1() {
/* 로컬 변수 선언과 초기값 대입 */
Sara localSara = new Sara() {
void walk()
{
System.out.println("산책합니다.");
}
void wake()
{
System.out.println("7시에 일어납니다");
walk();
}
};
//로컬변수 사용
localSara.wake();
}
void method2(Sara sar)
{
sar.wake();
}
}
* 익명 자식 객체 생성 RESULT *
package Hyunndy_Toy_Package;
public class ResultClass {
public static void main(String[] args)
{
Hyunndy H = new Hyunndy();
// 익명 객체 필드 사용
H.Sara1.wake();
// 익명 객체 로컬 변수 사용
H.method1();
// 익명 객체 매개값 사용
H.method2(
new Sara() {
void study()
{
System.out.println("공부합니다");
}
void wake()
{
System.out.println("8시에 일어납니다.");
study();
}
}
);
}
}
'Deperecated > JAVA' 카테고리의 다른 글
JAVA - 중첩 클래스&중첩 인터페이스 (1) | 2020.01.11 |
---|---|
JAVA - 예외 처리 (0) | 2020.01.10 |
JAVA - 인터페이스 (0) | 2020.01.09 |
JAVA - 어노테이션 (0) | 2020.01.09 |
JAVA 기본서 공부 5 - 클래스 (0) | 2020.01.05 |