11.함수적 인터페이스
by SANGGI JEON
함수적 인터페이스
- 모든 인터페이스를 람다식의 타겟타입으로 사용할 수 없음
- 람다식은 하나의 메소드를 정의
- 하나의 추상메소드를 가지는 인터페이스만 람다식의 타겟 타입이 됨 (함수적 인터페이스)
- 함수적 인터페이스 작성 시 실수를 방지하기 위해 컴파일러가 체킹해 주기를 원하는 경우 @FunctioalInterface 어노테이션을 사용
- 목적
- 일회성 -> 익명 객체 함수 -> but 복잡함 -> 간결하게 함수적 인터페이스
@FunctionalInterface // 이 Annotation으로 컴파일시 함수적 인터페이스라고 알림
public interface TestFunctionalInterface {
public void method();
public void anotherMethod(); // 컴파일 에러
}
예제1 : 전달인자가 없는 경우
// 예제1-1. MyFunctionalInterface.interface
package com.jremind.exam0625;
@FunctionalInterface
public interface MyFunctionalInterface {
public void method();
}
// 예제 1-2. FunctionalInterfaceMain.java
package com.jremind.exam0625;
public class FunctionalInterfaceMain {
public static void main(String[] args) {
MyFunctionalInterface fi = () -> {
String str = "method call - 1";
System.out.println(str);
};
fi.method();
fi = () -> {
System.out.println("method call - 2");
};
fi.method();
fi = () -> System.out.println("method call - 3");
fi.method();
}
}
예제 2: 전달인자가 있는 경우
//예제 2-1. MyFunctionalInterface.interface
package com.jremind.exam0625;
@FunctionalInterface
public interface MyFunctionalInterface {
public void method(int x);
}
// 예제 2-2. FunctionalInterfaceMain.java
package com.jremind.exam0625;
public class FunctionalInterfaceMain {
public static void main(String[] args) {
MyFunctionalInterface fi = (x) -> {
String str = "method call - 1";
System.out.println(str);
};
fi.method(2);
fi = (x) -> {
System.out.println(x*5);
};
fi.method(2);
fi = x -> System.out.println(x*5);
fi.method(2);
}
}
예제 3: 반환(return)이 있는 경우
// 예제 3-1. MyFunctionalInterface.interface
package com.jremind.exam0625;
public interface MyFunctionalInterface {
public int method(int x, int y);
}
// 예제 3-2. FunctionalInterfaceMain.java
package com.jremind.exam0625;
public class FunctionalInterfaceMain {
public static void main(String[] args) {
MyFunctionalInterface fi = (x, y) -> {
int result = x + y;
return result;
};
System.out.println(fi.method(2, 5));
fi = (x, y) -> {
return x + y;
};
System.out.println(fi.method(2, 5));
fi = (x, y) -> x + y;
System.out.println(fi.method(2, 5));
fi = (x, y) -> sum(x, y);
System.out.println(fi.method(2, 5));
}
public static int sum(int x, int y) {
return x + y;
}
}
Subscribe via RSS