자바 람다(Lambda)란? - 2부 람다를 어떻게 읽고, 어떻게 작성하는가

청록비
1 read

4. 람다는 어떻게 만들어질까?

람다가 처음에는 어려워 보이지만, 사실은 기존 메서드에서 불필요한 부분을 하나씩 생략한 결과라고 생각하면 이해하기 쉽습니다.

예를 들어 다음과 같은 메서드가 있다고 가정해 보겠습니다.

public int sum(int a, int b) {
    return a + b;
}

람다에서는 메서드 이름과 반환 타입을 생략하고, 필요한 입력값(파라미터)과 실행할 코드만 남깁니다.

(a, b) -> a + b

즉, 아래와 같은 정보는 대부분 생략됩니다.

  • 접근 제어자 (public, private 등)

  • 반환 타입 (void, int 등)

  • 메서드 이름

  • 파라미터 타입(대부분의 경우)

컴파일러가 함수형 인터페이스를 보고 필요한 정보를 자동으로 추론하기 때문입니다.


5. 람다 문법 이해하기

람다는 몇 가지 형태만 익혀두면 대부분의 상황에서 사용할 수 있습니다.

① 반환값이 있는 경우

(a, b) -> a + b

실행할 코드가 한 줄이라면 return과 중괄호({ })를 생략할 수 있습니다.

② 여러 줄의 코드를 실행하는 경우

(a, b) -> {

    int result = a + b;

    return result;

}

코드가 두 줄 이상이라면 중괄호를 사용해야 하며, 반환값이 있다면 return도 함께 작성해야 합니다.

③ 반환값이 없는 경우

name -> System.out.println(name)

실행만 하고 반환값이 없는 경우에도 같은 형태로 사용할 수 있습니다.


6. 컴파일러의 타입 추론

람다에서 파라미터 타입을 작성하지 않는 이유는 컴파일러가 인터페이스를 보고 자동으로 타입을 추론하기 때문입니다.

예를 들어 아래 두 코드는 같은 의미입니다.

Comparator<String> c1 =
    (String s1, String s2) -> s1.compareTo(s2);
Comparator<String> c2 =
    (s1, s2) -> s1.compareTo(s2);

실무에서는 대부분 두 번째처럼 타입을 생략해서 작성합니다.


7. 자주 사용하는 함수형 인터페이스

Java에서는 자주 사용하는 함수 형태를 미리 인터페이스로 제공하고 있습니다.

인터페이스

입력

반환

용도

Consumer

O

X

데이터 소비

Supplier

X

O

데이터 생성

Function

O

O

데이터 변환

Predicate

O

boolean

조건 검사

이름이 조금 낯설 수 있지만, Stream API를 사용하다 보면 자연스럽게 자주 만나게 됩니다.

Consumer 예제

Consumer<String> consumer =
    name -> System.out.println(name);

consumer.accept("Java");

Supplier 예제

Supplier<LocalDate> supplier =
    () -> LocalDate.now();

System.out.println(supplier.get());

Function 예제

Function<String, Integer> function =
    text -> text.length();

System.out.println(function.apply("Lambda"));

Predicate 예제

Predicate<Integer> predicate =
    number -> number > 0;

System.out.println(predicate.test(10));

처음에는 이름이 어려워 보일 수 있지만, 각 인터페이스가 입력과 반환 형태만 다를 뿐이라는 점을 기억해 두면 이해하기 훨씬 수월합니다.

다음 편에서는 실무에서 많이 사용하는

  1. sort()

  2. forEach()

  3. filter()

  4. map()

  5. Runnable

  6. removeIf()

내용을 다루겠습니다.


출처 및 참고 자료

#Cloud#Infrastructure#Serverless#Tech2024