람다 표현식(lambda expression)은 Java에서 익명 함수를 정의하기 위한 방법이다. 람다 표현식은 하나의 메서드를 가진 클래스를 표현하기 위해, 새롭게 클래스를 정의하거나 익명 클래스를 사용해야만 하던 문제를 해결한다.

람다 표현식의 조건

람다 표현식을 사용하기 위해 두 가지 조건을 만족해야 한다.

  1. 람다 표현식은 함수형 인터페이스의 구현체로 사용되어야 한다.
  2. 함수형 인터페이스는 하나의 추상 메서드를 가져야 한다.

@FunctionalInterface 애너테이션

@FunctionalInterface 애너테이션을 적용해서 람다 표현식을 위한 제약을 만족하는 인터페이스를 선언할 수 있다. 다음의 Sentence 인터페이스는 임의의 문장을 반환하는 get 추상 메서드를 갖는다.

// Main.java
 
@FunctionalInterface
interface Sentence {
    String get();
}

추상 메서드가 없거나 두 개 이상 있는 메서드에 @FunctionalInterface 애너테이션을 적용하면, java: Unexpected @FunctionalInterface annotation 오류가 발생한다.

람다 표현식의 적용 사례

다음 예제의 Person 클래스의 say 메서드는 Sentence 자료형의 매개변수 sentence를 출력한다. Main 클래스에서는 익명 클래스와 람다 표현식을 사용해 say 메서드에 전달한 인수를 생성한다.

// Main.java
 
@FunctionalInterface
interface Sentence {
    String get();
}
 
class Person {
    void say(Sentence sentence) {
        System.out.println(sentence.get());
    }
}
 
public class Main {
    public static void main(String[] args) {
        // 익명 클래스
        Person jane = new Person();
        jane.say(new Sentence() {
            @Override
            public String get() {
                return "안녕하세요. 저는 제인입니다.";
            }
        });
 
        // 람다 표현식
        Person hun = new Person();
        hun.say(() -> {
            return "반가워요. 저는 훈이에요.";
        });
 
        Person suhyun = new Person();
        suhyun.say(() -> "저는 수현이라고 합니다.");
    }
}

참고 문헌