Java 함수형 인터페이스
by 볼빵빵오춘기함수형 인터페이스
- 단 하나의 추상 메서드만 선언된 인터페이스이다.
더보기
⇒ @FunctionalInterface 어노테이션을 붙여주는 것이 좋다.
⇒ why? 그러면 어노테이션이 붙음으로써 함수형인터페이스를 올바르게 작성했는지 컴파일러가 확인해준다.
⇒ 왼쪽 코드를 구현하면 오른쪽 클래스처럼 된다.
⇒ 왼쪽코드는 익명클래스를 구현했고 클래스를 선언한 것이고, 객체생성 이렇게를 동시에 한 것이다.
⇒ 따라서 그전에 obj.max(3,5) 를 사용하였을땐 에러였지만 변경후에는 사용가능하다.
- 함수형 인터페이스 타입의 참조변수로 람다식을 참조할 수 있다.
단, 함수형 인터페이스의 메서드와 람다식의 매개변수 개수와 반환타입이 일치해야 한다.
즉, 함수형인터페이스는 람다식을 다루기위해 사용하는 것이다.
예제 코드
예제 코드
더보기
public class Try {
public static void main(String[] args) {
// 람다식 사용전 코드 start
Myfunction f = new Myfunction() {
public int max(int a, int b) {
return a>b ? a: b;
}
};
// 람다식 사용전 코드 end
int value = f.max(3,5);
System.out.println(value);
}
}
@FunctionalInterface
// 이 어노테이션이 붙으면 단 하나의 추상 메서드만 가져야
interface Myfunction{
// public abstract int max(int a, int b); // public abstract 생략가능
int max(int a, int b);
}
⇒ 람다식 사용전 코드start ~ end 코드를 람다식을 이용해 아래와 같이 변경가능하다.
// 람다식을 다루기 위한 참조변수의 타입은 함수형 인터페이스로 한다.
Myfunction f = (a,b) -> a > b ? a : b; // 람다식(익명객체)
예제
더보기
⇒ 익명 객체를 람다식으로 대체하였다.
함수형 인터페이스 타입의 매개변수, 반환타입
함수형 인터페이스 타입의 매개변수
함수형 인터페이스 타입의 반환타입
예제 코드
더보기
public class Try {
static void execute(MyFunction f) { // 매개변수의 타입이 MyFunction인 메서드
f.run();
}
static MyFunction getMyFunction() { // 반환 타입이 MyFunction인 메서드
MyFunction f = () -> System.out.println("f3.run()");
return f;
}
public static void main(String[] args) {
// 람다식으로 MyFunction의 run()을 구현
MyFunction f1 = ()-> System.out.println("f1.run()");
MyFunction f2 = new MyFunction() { // 익명클래스로 run()을 구현
public void run() { // public을 반드시 붙여야 함
System.out.println("f2.run()");
}
};
MyFunction f3 = getMyFunction();
f1.run();
f2.run();
f3.run();
execute(f1);
execute( ()-> System.out.println("run()") );
}
}
@FunctionalInterface
interface MyFunction {
void run(); // public abstract void run();
}
'👩🏻💻 About 프로그래밍 > Java' 카테고리의 다른 글
Java Predicate 결합. CF와 함수형 인터페이스 (1) | 2023.12.11 |
---|---|
Java java.util.function 패키지 (0) | 2023.12.11 |
Java 람다식(Lambda Expression) (0) | 2023.12.11 |
Java wait()과 notify() (0) | 2023.12.09 |
Java 쓰레드의 동기화(synchronization) (1) | 2023.12.09 |
블로그의 정보
Hello 춘기's world
볼빵빵오춘기