본문 바로가기
JAVA BASE/Lambda&Stream(람다와 스트림)

02. [자바] 함수형 인터페이스(Funciton Interface)

by staticClass 2021. 1. 12.

함수형 인터페이스?

함수형 인터페이스에는 오직 하나의 추상 메서드만 정의되어 있어야 한다.

그래야 람다식과 인터페이스의 메서드가 1:1로 연결될 수 있기 때문이다.

💡람다를 사용하여 함수인터페이스를 구현 하면 익명 함수보다 더 간단한 구조로 코딩이 가능하다.
💡하나의 함수형 인터페이스를 람다를 이용해 여러번 사용이 가능하다 여러가지 기능으로 구현이 가능하다

 

 

'@FunctionalInterface'를 붙이면, 컴파일러가 함수형 인터페이스를 올바르게 정의하였는지 확인해준다.
@FunctionalInterface
interface CompInt {
	public abstract int max(int a, int b);
}

 

람다를 사용하지 않고 함수인터페이스를 구현

public class Main {
	public static void main(String[] args) {
		// 람다를 사용 하지 않고 함수인터페이스 구현
		CompInt f = new CompInt() {
		
			public int max(int a, int b) {
				return a > b ? a : b;
			}
		};
	System.out.println(f.max(1, 2));
}

 

람다를 사용하여 함수인터페이스를 구현

public class Main {
	public static void main(String[] args) {
		// 람다를 사용 하여 함수 인터페이스 구현
		CompInt mf = (a, b) -> a > b ? a : b;
		System.out.println(mf.max(5, 2));
	}
}

 

 

하나의 함수형 인터페이스를 람다를 이용해 여러가지 기능으로 구현이 가능하다

@FunctionalInterface
interface MyMethod {
	abstract void myMethod();
}

public class Main {
	public static void main(String[] args) {
		MyMethod f = () -> System.out.println("myMethod() one ing...");
		aMethod(f);
		
		aMethod(() -> System.out.println("myMethod() two ing..."));
	}
	
	static void aMethod(MyMethod f) {
		f.myMethod();
	}
}

댓글