Language Study/Java

[모던 자바 인 액션] 람다 표현식

지미닝 2024. 7. 23. 19:40

람다란 무엇인가?

람다 표현식메서드로 전달할 수 있는 익명 함수를 단순화한 것이라고 할 수 있다. 람다표현 식에는 이름은 없지만, 파라미터 리스트, 바디, 반환 형식, 발생할 수 있는 예외 리스트는 가질 수 있다.

 

  • 익명
    보통의 메서드와 달리 이름이 없으므로 익명이라 표현한다. 구현해야 할 코드에 대한 걱정거리가 줄어든다.
  • 함수
    람다는 메서드처럼 특정 클래스에 종속되지 않으므로 함수라고 부른다. 하지만 메서드처럼 파라미터 리스트, 바디, 반환 형식, 가능한 예외 리스트를 포함한다.
  • 전달
    람다 표현식을 메서드 인수로 전달하거나 변수로 저장할 수 있다.
  • 간결성
    익명 클래스처럼 많은 자질구레한 코드를 구현할 필요가 없다.

 

// 기존 코드
Comparator<Apple> byWeight = new Comparator<Apple>() { public int compare(Apple a1, Apple a2) {
           return a1.getWeight().compareTo(a2.getWeight());
       }
};


 // 람다 코드
 Comparator<Apple> byWeight = (Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight());

람다를 적용시킬 경우 코드가 매우 간단해진다.

 

람다표현식은 세 부분으로 이루어진다.

  • 파라미터 리스트: 메서드 파라미터 두 개
  • 화살표: 람다의 파라미터 리스트와 바디를 구분
  • 람다 바디: 람다의 반환값에 해당하는 표현식

 

어디에, 어떻게 람다를 사용할까?

 함수형 인터페이스라는 문맥에서 람다 표현식을 사용할 수 있다. 함수형 인터페이스란 아래와 같은 인터페이스로 메서드를 파라미터화 할 수 있는 것이다. 

public interface Predicate<T> { 
	boolean test (T t);
}

 

정확히 하나의 추상 메서드를 지정하는 인터페이스다.

 

 람다 표현식으로 함수형 인터페이스의 추상 메서드 구현을 직접 전달할 수 있으므로 전체 표현식을 함수형 인터페이스의 인스턴스로 취급할 수 있다. 함수형 인터페이스보다는 덜 깔끔하지만 익명 내부 클래스로도 같은 기능을 구현할 수 있다.

 

 

실행 어라운드 패턴

 실제 자원을 처리하는 코드를 설정과 정리 두 과정이 둘러싸는 형태를 갖게 되는데, 이와 같은 코드를 실행 어라운드 패턴이라고 부른다.