본문 바로가기
개발/Java

[리팩토링] 함수형 인터페이스와 lambda

by meanjung 2023. 8. 16.

람다

  • 익명 함수
  • 함수를 하나의 식으로 표현한 것이다.
  • 불필요한 코드를 줄이고 가독성을 높일 수 있다. 
// 람다 방식
(매개변수, ... ) -> { 실행문 ... }

// 예시
() -> "Hello World!";

 

함수형 인터페이스

  • 1개의 추상 메서드를 갖는 인터페이스를 의미한다.
  • java 8부터는 인터페이스에 구현체가 있는 default method, static method를 추가할 수 있는데, 여러 default method, static method가 있더라도 추상 메서드가 오직 하나인 경우를 함수형 인터페이스라고 한다. 
  • lambda 표현식은 함수형 인터페이스로만 사용 가능하다.
  • @FunctionalInterface 애노테이션은 해당 인터페이스가 함수형 인터페이스 조건에 맞는지 검사한다.
@FunctionalInterface
interface CustomInterface<T> {
    T myCall();

    default void printDefault() {
        System.out.println("Hello Default");
    }

    static void printStatic() {
        System.out.println("Hello Static");
    }
}
public class Main {

    public static void main(String[] args) {

        CustomInterface<String> customInterface = () -> "asdf";
        System.out.println((customInterface.myCall()));
    }

}

 

 

CustomInterface가 함수형 인터페이스이기 때문에(추상메서드가 하나만 존재하기 때문에) 람다식으로 사용할 수 있는 것이다.


앞의 포스트에서 Optional의 orElseGet에서 람다 표현식을 통해 리팩토링했었다. 

여기서 orElseGet에 커서를 대면 다음과 같이 java.util.function.Supplier가 뜬다. 

 

이를 클릭하면 다음과 같이 Supplier가 함수형 인터페이스라는 것이 나온다. 

그렇기 때문에 우리가 람다식으로 사용할 수 있었던 것이다. 

 

 

 

참고

https://bcp0109.tistory.com/313

 

Java 8 함수형 인터페이스 (Functional Interface)

Overview 함수형 인터페이스란 1 개의 추상 메소드를 갖는 인터페이스를 말합니다. Java8 부터 인터페이스는 기본 구현체를 포함한 디폴트 메서드 (default method) 를 포함할 수 있습니다. 여러 개의 디

bcp0109.tistory.com

 

댓글