https://youtu.be/0Sp9eFRV8gE?list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp
📖본 포스팅은 '자바의 정석 - 남궁성 저자' 님의 책과 유튜브 강의를 보고 작성되었습니다.
[함수형 인터페이스]
- 함수형 인터페이스 - 단 하나의 추상 메서드만 선언된 인터페이스
- 함수형 인터페이스 타입의 참조변수로 람다식을 참조할 수 있다.
- 단 함수형 인터페이스의 메서드와 람다식의 매개변수 개수와 반환타입이 일치해야 한다.
[실습]
package javajungsuk;
public class Java14_0 {
public static void main(String[] args) {
// Object obj = (a,b) -> a>b ? a:b; //람다식 익명 객체
MyFunction f = new MyFunction() {
public int max(int a, int b) {
return a > b ? a:b;
}
};
int value = f.max(3,5);
//Object 타입의 obj에는 max라는 버튼이 존재하지 않고 형변환이 불가하다.
//이럴 때 필요한 것이 함수형 인터페이스다.
System.out.println("value = "+value);
}
}
@FunctionalInterface //함수형 인터페이스는 단 하나의 추상 메서드만 가져야 한다.
interface MyFunction{
public abstract int max(int a, int b);
}
↓
package javajungsuk;
public class Java14_0 {
public static void main(String[] args) {
//람다식을 다루기 위한 참조변수 타입은 함수형 인터페이스로 한다.
MyFunction f = (a,b) -> a>b ? a:b; //람다식 익명 객체
int value = f.max(3,5);
System.out.println("value = "+value);
}
}
@FunctionalInterface //함수형 인터페이스는 단 하나의 추상 메서드만 가져야 한다.
interface MyFunction{
public abstract int max(int a, int b);
}
[함수형 인터페이스 타입의 매개변수와 반환타입]
- 함수형 인터페이스 타입의 매개변수
- 람다식을 매개변수로 넣어주는 것을 의미한다.
void aMethod(MyFunction f){
f.myMethode();//MyMethode에 정의된 메서드 호출
}
MyFunction f = () -> System.out.println("myMethod()");
aMethode(f);
↓
aMethod(()-> System.out.println("myMethod()");
- 함수형 인터페이스 타입의 반환 타입
- 함수가 반환하는 값이 람다식인 경우를 의미한다.
MyFunction myMethode() {
MyFunction f = () -> {};
return f
}
↓
MyFunction myMethod() {
return () -> {};
}
[실습]
package javajungsuk;
@FunctionalInterface
interface MyFunction {
void run(); // public abstract void run();
}
public class Java14_1 {
static void execute(MyFunction f) {
f.run();
}
static MyFunction getMyFunction() {
MyFunction f = () -> System.out.println("f3.run()");
return f;
}
public static void main(String[] args) {
MyFunction f1 = () -> System.out.println("f1.run()");
MyFunction f2 = new MyFunction() { //익명클래스로 run() 구현
@Override
public void run() {
System.out.println("f2.run()");
}
};
MyFunction f3 = getMyFunction();
f1.run();
f2.run();
f3.run();
execute(f1);
execute(()->System.out.println("run()"));
}
}
'Java > 객체지향' 카테고리의 다른 글
[객체지향][람다식/Lambda Expression] - Predicate의 결합. CF와 함수형 인터페이스 (0) | 2022.03.09 |
---|---|
[객체지향][람다식/Lambda Expression] - java.util.function패키지 (0) | 2022.03.09 |
[객체지향][람다식/Lambda Expression] - 람다식 (0) | 2022.03.05 |
[객체지향][쓰레드/thread] - 쓰레드 동기화의 단점을 보완하기 위한 wait()와 notify() (0) | 2022.03.04 |
[객체지향][쓰레드/thread] - 쓰레드의 동기화(synchronization) (0) | 2022.03.04 |