1. Question

람다 표현식(lambda expression)이란 무엇인가?

2. Answer

람다 표현식(lambda expression)Java 8부터 도입된 중요한 기능 중 하나로, 함수형 프로그래밍 개념을 Java에 도입한 것이다. 이를 통해 코드를 간결하게 작성하고 가독성을 향상시킬 수 있으며, 함수형 프로그래밍 스타일을 지원하여 코드를 함수처럼 다룰 수 있게 해준다. 람다 표현식은 익명 함수로 사용되어 메서드 정의 없이도 동작을 표현할 수 있으며, 병렬 처리를 지원하여 성능을 향상시킬 수 있다. Java 8 이상에서 사용 가능하며, 코드의 재사용성과 컬렉션 처리를 용이하게 만들어주는 강력한 도구이다.

다음은 람다의 기본 문법이다.

// 표현식 스타일 (expression style)
(parameters) -> expresssion
// 블록 스타일 (block style)
(parameters) -> { statements; }

3. Detail

A. 주요 구성 요소

  • 매개변수(파라미터) 리스트: 람다 표현식은 메서드와 마찬가지로 매개변수 리스트를 가진다. 이 매개변수 리스트는 메서드의 매개변수와 동일한 형태를 가진다.

  • 화살표 연산자(->): 람다 표현식의 매개변수 리스트와 실행 코드 블록을 구분하기 위해, 화살표 연산자를 사용한다.

  • 실행 코드 블록: 람다 표현식의 주요 부분은 실행 코드 블록이다. 이 코드 블록은 메서드의 본문 역할을 하며, 원하는 동작을 정의한다.

B. 람다 예제

  • 불리언 표현식 - (List<String> list) -> list.isEmpty()

  • 객체 생성 - () -> new Apple(10)

  • 객체에서 소비 - (Apple a) -> { System.out.println(a.getWeight()); }

  • 객체에서 선택/추출 - (String s) -> s.length()

  • 두 값을 조합 - (int a, int b) -> a * b

  • 두 객체 비교 - (Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight())

C. 사용 예시

// 기존 코드
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());

D. 장점

  • 간결성: 람다 표현식을 사용하면 코드가 훨씬 간결해진다. 작은 함수 또는 간단한 동작을 한 줄로 표현할 수 있어 가독성이 향상된다.

  • 익명 함수: 람다 표현식은 익명 함수로 사용되므로, 메서드를 정의하지 않고도 동작을 표현할 수 있다. 이로써 코드가 더 간결해지고 모듈화된다.

  • 함수형 프로그래밍 지원: 람다 표현식은 함수형 프로그래밍의 핵심 개념 중 하나로, 함수를 값처럼 다룰 수 있게 해준다. 함수를 변수에 할당하거나 다른 함수에 인자로 전달할 수 있다.

  • 병렬 처리 간소화: 람다 표현식은 병렬 처리를 지원하기에 이상적이다. stream API와 함께 사용하면, 병렬 처리 작업을 간소화하고 성능을 향상시킬 수 있다.

  • 디버깅 용이성: 람다 표현식을 사용하면 스택 트레이스에서 더 읽기 쉬운 메서드 이름이 표시되므로, 디버깅이 용이해진다.

  • 코드 재사용: 람다 표현식은 메서드를 일급 객체로 다루기 때문에, 메서드와 마찬가지로 재사용할 수 있다. 다양한 곳에서 동일한 람다 표현식을 사용할 수 있어, 코드 재사용성이 향상된다.

  • 컬렉션 처리 용이성: 람다 표현식을 사용하여 컬렉션의 요소를 처리하고 조작할 때, 코드가 간결하고 명확해진다. stream API와 함께 사용하면 데이터를 쉽게 다룰 수 있다.

4. Reference

  • “모던 자바 인 액션” (저자: 라울-게이브리얼 우르마, 마리오 푸스코, 앨런 마이크로프트)

태그:

카테고리:

업데이트:

댓글남기기