14-5~6 함수형 인터페이스

oyeon·2021년 3월 19일
0

Java 개념

목록 보기
61/70

함수형 인터페이스

  • 단 1개의 추상 메서드만 선언된 인터페이스
@FunctionalInterface // 함수형 인터페이스라는 의미. 메서드가 2개 이상 선언되면 오류를 체크해줌
interface MyFunction {
    public abstract int max(int a, int b);
}

MyFunction f = new MyFunction(){
		    public int max(int a, int b){
        		  return a > b ? a : b;
        	    }
	       };

int value = f.max(3, 5); // OK. MyFunction에 max()가 있음

위에서 선언한 익명 객체를 아래와 같은 람다식으로 변경할 수 있다.

  • 함수형 인터페이스 타입의 참조변수로 람다식을 참조할 수 있음.
// 람다식(익명 객체)을 다루기 위한 참조변수의 타입은 함수형 인터페이스로 한다.
MyFunction f = (a, b) -> a > b ? a : b;
int value = f.max(3, 5); // 실제로는 람다식(익명 함수)이 호출 됨

함수형 인터페이스 예시

@FunctionalInterface
interface Comparator<T>{
    int compare(T o1, T o2);
}

List<String> list = Arrays.asList("abc", "aaa", "bbb", "ddd", "aaa");
Collections.sort(list, new Comparator<String>() {
			    public int compare(String s1, String s2){
            	       		  return s2.compareTo(s1);
            		    }
			});

위에서 선언한 익명 객체를 아래와 같은 람다식으로 변경할 수 있다.

Collections.sort(list, (s1, s2) -> s2.compareTo(s1));

함수형 인터페이스 타입의 매개변수

@FunctionalInterface
interface MyFunction{
    void myMethod();
}

void aMethod(MyFunction f){
    f.myMethod();	// MyFunction에 정의된 메서드 호출
}

호출하는 코드는 다음과 같다.

MyFunction f () -> System.out.println("myMethod()");
aMethod(f);

위의 문장을 아래와 같이 한 줄로 표현할 수도 있다.

aMethod(() -> System.out.println("myMethod()"));

함수형 인터페이스 타입의 반환타입

// 람다식 반환
MyFunction myMethod(){
    MyFunction f = () -> {};
    return f;
}

위의 문장을 아래와 같이 한줄로 표현할 수도 있다.

MyFunction myMethod(){
    return ()->{};
}
profile
Enjoy to study

0개의 댓글