[Java] 람다 표현식(lambda expression)이란 무엇인가?
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
- “모던 자바 인 액션” (저자: 라울-게이브리얼 우르마, 마리오 푸스코, 앨런 마이크로프트)
댓글남기기