자바 람다(Lambda)란? - 4부 람다 사용 시 주의사항과 메서드 참조(Method Reference)
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 + b3. 함수형 인터페이스에서만 사용할 수 있습니다.
@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를 조금 더 자세히 다루면서, 람다와 함께 데이터를 효율적으로 처리하는 방법도 함께 정리해 보겠습니다.