함수형 인터페이스란,

단 하나의 추상 메서드만 선언된 인터페이스

@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

+ Recent posts