함수형 인터페이스란,
단 하나의 추상 메서드만 선언된 인터페이스
@FunctionalInterface // 함수형 인터페이스를 올바르게 작성했는지 컴파일러가 확인. 생략 가능
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);
사용 이유?
람다식을 다루기 위해서
public static void main(String[] args){
// 람다식의 참조변수를 Object로 한다면?
Object obj = (a, b) -> a > b ? a : b;
int value = obj.max(3, 5); // 람다식이 참조하는 obj에 max() 메서드가 없기 때문에 error
// --------------------------------------------------------------------------------
// 함수형 인터페이스를 참조변수로 사용
MyFunction f = new MyFunction(){
public int max(int a, int b){ // 오버라이딩 규칙 - 접근제어자는 좁게 못 바꾼다.
return a > b ? a : b;
}
}
int value = f.max(3, 5);
// --------------------------------------------------------------------------------
// 람다식으로 함수형 인터페이스 사용
MyFunction f = (a, b) -> a > b ? a : b;
int value = f.max(3, 5);
}
// 함수형 인터페이스 사용
@FunctionalInterface
interface MyFunction{
public abstract int max(int a, int b){}; // public, abstract 생략 가능
}
예제
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));
아리송...🤢
728x90
'이론 > 개인공부' 카테고리의 다른 글
함수 직접 호출과 함수 참조 전달 차이 (0) | 2024.06.19 |
---|---|
람다식 (0) | 2023.01.31 |
자바 스트림(Stream) (0) | 2022.12.30 |
OSI 7계층(OSI 7 Layers) (1) | 2022.08.29 |
정보처리기사 필기 (0) | 2022.04.25 |