자바 람다(Lambda)란? - 4부 람다 사용 시 주의사항과 메서드 참조(Method Reference)

청록비
1 read

9. 람다를 사용할 때 알아두면 좋은 점

람다는 코드를 간결하게 만들어 주는 장점이 있지만, 모든 상황에서 사용하는 것이 정답은 아닙니다.

몇 가지 정도만 기억해 두면 조금 더 읽기 좋은 코드를 작성하는 데 도움이 됩니다.


① 람다가 너무 길어진다면 메서드로 분리하기

람다는 한두 줄 정도의 간단한 로직을 표현할 때 가장 읽기 쉽습니다.

반대로 여러 조건문이나 반복문이 들어가기 시작하면 오히려 일반 메서드가 더 이해하기 쉬운 경우도 많습니다.

list.forEach(item -> {

    // 여러 줄의 복잡한 로직...

});

이런 경우에는 메서드로 분리하는 것이 유지보수하기 편합니다.


② 지역 변수는 변경할 수 없습니다.

람다 안에서 외부의 지역 변수를 사용할 수는 있지만, 해당 변수는 final이거나 사실상 final(Effectively Final)이어야 합니다.

int number = 10;

Runnable runnable =
    () -> System.out.println(number);

반면 아래처럼 값을 변경하려고 하면 컴파일 오류가 발생합니다.

int number = 10;

Runnable runnable = () -> {
    number++;
};

람다가 생성되는 시점의 값을 안전하게 유지하기 위한 자바의 규칙이라고 이해하면 됩니다.


③ 람다가 항상 좋은 것은 아닙니다.

람다는 코드를 짧게 만들 수 있지만, 너무 복잡한 로직을 억지로 람다 안에 넣으면 오히려 가독성이 떨어질 수 있습니다.

코드를 짧게 작성하는 것보다, 읽기 쉬운 코드를 작성하는 것이 더 중요합니다.


10. 메서드 참조(Method Reference)

람다를 자주 사용하다 보면 메서드 참조(Method Reference)도 함께 보게 됩니다.

메서드 참조는 기존 람다를 조금 더 간결하게 표현하는 문법입니다.

람다

fruits.forEach(fruit ->
    System.out.println(fruit));

메서드 참조

fruits.forEach(System.out::println);

동작은 완전히 동일하지만 코드가 조금 더 간결해졌습니다.

메서드 참조는 람다를 충분히 익힌 후 자연스럽게 사용해도 늦지 않습니다.


11. 지금까지 살펴본 내용

이번 글에서는 람다의 기본 개념부터 실무에서 자주 사용하는 예제까지 함께 살펴보았습니다.

내용

핵심

람다(Lambda)

함수형 인터페이스를 간결하게 구현하는 문법

함수형 인터페이스

추상 메서드가 하나만 존재하는 인터페이스

기본 문법

(파라미터) -> 실행 코드

타입 추론

컴파일러가 파라미터 타입을 자동으로 추론

대표 인터페이스

Consumer, Supplier, Function, Predicate

자주 사용하는 메서드

sort(), forEach(), filter(), map(), removeIf()

메서드 참조

:: 문법으로 람다를 더 간결하게 표현


핵심만 다시 정리해 보기

람다를 처음 공부할 때는 아래 네 가지만 기억해도 충분합니다.

1. 기본 형태

(파라미터) -> 실행 코드

2. 한 줄이라면 중괄호와 return을 생략할 수 있습니다.

(a, b) -> a + b

3. 함수형 인터페이스에서만 사용할 수 있습니다.

@FunctionalInterface
interface Calculator {

    int sum(int a, int b);

}

4. Stream API와 함께 가장 많이 사용됩니다.

names.stream()
     .filter(name -> name.startsWith("김"))
     .map(String::toUpperCase)
     .forEach(System.out::println);

마무리

람다는 Java 8부터 도입된 문법이지만, 현재는 컬렉션, Stream API, 비동기 처리 등 다양한 곳에서 자연스럽게 사용되고 있습니다.

처음에는 -> 문법이 다소 낯설게 느껴질 수 있지만, 몇 번 직접 작성해 보면 생각보다 어렵지 않다는 것을 느끼게 됩니다.

특히 리스트 정렬이나 forEach(), filter()와 같은 예제를 자주 따라 해 보면 람다에 익숙해지는 데 많은 도움이 됩니다.

이번 글에서는 람다의 가장 기본적인 개념과 활용 방법을 중심으로 살펴보았습니다. 다음에는 Stream API를 조금 더 자세히 다루면서, 람다와 함께 데이터를 효율적으로 처리하는 방법도 함께 정리해 보겠습니다.


출처 및 참고 자료

#Cloud#Infrastructure#Serverless#Tech2024