← go back

Functional Interface

함수형 인터페이스(Functional Interfaces) 란 무엇일까. 함수형 인터페이스는 하나의 추상메소드를 가진 인터페이스를 의미한다. 이것은 람다식과 연결이 되는데, 함수형 인터페이스의 객체를 생성하는 방식으로 익명클래스를 활용하는 방식이 아닌 람다식으로도 생성할 수 있기 때문이다.

// 인터페이스 선언
interface Calculate {
	int operation(int a, int b);
}
// operation 메소드 호출을 위한 인터페이스 객체를 익명클래스로 구현
private void calculateClassic() {
	Calculate calculateAdd = new Calculate() {
		@Override
		public int operation(int a, int b) {
			return a+b;
		}
	};

	// operation 호출부
	System.out.println(calculateAdd.operation(1.2));
}
// operation 메소드 호출을 위한 인터페이스 객체를 lambda로 구현 - 익명클래스보다 간결해진 구현이다
private void calculateClassic() {
	Calculate calculateAdd = (a, b) -> a+b;
	// operation 호출부
	System.out.println(calculateAdd.operation(1.2));
}



Calculate 라는 인터페이스는 일반적인 인터페이스 처럼 보이지만 이 인터페이스는 Functional(함수형) 인터페이스라고 부를 수 있다. 하지만 이 함수형 인터페이스에는 주의해야 할 점이 있다.

// 메소드가 2개 있는 인터페이스 - 함수형 인터페이스가 될 수 없다.
interface Calculate {
	int operationAdd(int a, int b);
	int operationSubtract(int a, int b);
}

인터페이스에 이렇게 메소드가 두개 정의되어 있다면 람다식을 사용할 수 없고 컴파일 에러가 발생한다. 함수형 인터페이스는 반드시 하나의 메소드만을 포함해야 하며 컴파일 단계에서 이런 혼동을 피하기 위해 @FunctionalInterface 어노테이션을 명시해준다.

// @FunctionalInterface 어노테이션을 통해 이 인터페이스는 함수형 인터페이스임을 명시한다.
@FunctionalInterface
interface Calculate {
	int operation(int a, int b);
}


Reference

이상민, ⌜자바의 신 - 제2권⌟, 로드북(2017), p858-p861