스택큐힙리스트

[JAVA] 람다식과 메서드 레퍼런스 본문

개발

[JAVA] 람다식과 메서드 레퍼런스

스택큐힙리스트 2025. 7. 9. 08:29
반응형

🚀 왜 배우나?

자바 8 이후 함수형 프로그래밍 기능이 대거 추가되면서, 스프링 프로젝트에서도 람다식과 메서드 레퍼런스가 필수가 되었습니다.
익명 객체→람다식→메서드 레퍼런스 순으로 코드를 단축해 가독성·생산성·테스트 편의성을 모두 챙겨봅시다.


1. 람다식 한눈에 보기

  • 정의 : 메서드를 ‘값처럼’ 표현한 익명 함수 표현식
  • 전제 조건 : 대상은 함수형 인터페이스(추상 메서드 1개)
  • 기본 문법
(매개변수) -> { 실행문; }
(a, b) -> a + b           // 식(식별자 생략 가능)
() -> System.out.println() // 파라미터 없는 형태


✨ 람다식으로 코드 줄이기

// Before: 익명 구현 객체
Runnable task = new Runnable() {
    @Override public void run() { log.info("Hello"); }
};

// After: 람다식
Runnable task = () -> log.info("Hello");

2. 메서드 레퍼런스란?

람다식이 “다른 메서드를 그대로 호출하기만” 할 때, 클래스::메서드명 형태로 더 짧게 표현하는 문법입니다.

4가지 사용 패턴

  1. 정적 메서드 참조 Math::abs
  2. 특정 객체의 인스턴스 메서드 System.out::println
  3. 임의 객체의 인스턴스 메서드 String::toLowerCase
  4. 생성자 참조 ArrayList::new
// 람다식
list.stream().map(num -> Math.abs(num)).forEach(System.out::println);

// 메서드 레퍼런스
list.stream().map(Math::abs).forEach(System.out::println);

3. 실전 — 스프링 서비스에 적용

@Service
@RequiredArgsConstructor
public class OrderService {
    private final OrderRepository repo;

    // 람다식 + 스트림으로 조건 필터링
    public List<Order> highValueOrders(int minPrice) {
        return repo.findAll().stream()
                   .filter(o -> o.getTotalPrice() >= minPrice) // 람다
                   .sorted(Comparator.comparing(Order::getCreatedAt)) // 메서드 참조
                   .toList();
    }
}
  • 람다식으로 가독성 있는 필터·매핑·정렬 파이프라인을 만들고
  • 메서드 레퍼런스로 불필요한 변수 선언을 없앴습니다.

4. 람다 & 메서드 레퍼런스 활용 팁

  • 가독성 우선 : 표현식이 길어지면 오히려 이해가 어렵습니다.
  • 검증된 함수형 인터페이스 활용 : Predicate, Function, Consumer 등 표준형 먼저 고려.
  • 예외 처리 : Checked 예외를 던지는 대상은 별도 래퍼로 감싸야 합니다.
  • 병렬 스트림 주의 : 멀티스레드 환경에서 상태 공유 객체를 사용하지 말 것.
반응형
Comments