람다 표현식(Lamda expression)이란?
람다 표현식이란, 자바8에서 도입된 기능으로, 익명 함수(Anonymous function)을 지칭하는 용어이다.
쉽게 말해, 메서드를 간결한 하나의 식으로 표현한 것이다!
→ 메서드의 이름과 리턴값이 없어 익명 함수라고 부른다.
일반적으로 Java에서 메서드를 선언하는 경우를 생각해 보자.
자바의 기본적인 문법에서는, 메서드만 따로 선언하는 것이 불가능하며, 하나의 메서드를 선언하더라도 반드시 클래스가 있어야 한다. (클래스 먼저 선언 → 그 안에 함수 선언)
임시로 사용할 함수 하나 때문에 매번 클래스와 메서드를 선언하는 것은 번거롭다.
하지만 람다식을 사용하면, 기존의 메서드 선언 방식보다 코드의 길이를 대폭 줄일 수 있다.
코드가 어떻게 간결해지는지 람다식의 구조와 예시를 보자.
람다 표현식의 구조와 규칙
(매개변수) -> { 실행할 코드 }
람다식의 규칙
1. 매개변수가 1개인 경우, () 생략이 가능하다.
2. 실행 코드가 한 줄인 경우, { } 생략이 가능하다.
3. 리턴값이 있는 경우, return 생략이 가능하다.
4. 매개변수의 타입을 추론할 수 있는 경우 생략이 가능하다.
간단한 덧셈 함수 예시를 들어보겠다.
int add(int a, int b){
return a + b;
}
일반적인 자바 메서드 선언 방법은 위와 같다. 이를 람다식으로 변환하면 아래처럼 된다.
// 기본 람다식 구조
(int a, int b) -> {
return a + b;
}
// 실행 코드가 1줄이므로 {} 생략 가능
(int a, int b) -> return a + b;
// 리턴값이 있으므로 return 생략 가능
(int a, int b) -> a + b;
// 매개변수 타입 생략 가능
(a, b) -> a + b;
람다식을 사용할 때 컴파일러가 타입을 추론할 수 있는 경우, 매개변수의 타입을 생략해도 오류 없이 동작한다!
매개변수가 하나일 때도 생략 가능하다! 단 항상 생략 가능한 것은 아니다.
매개변수 생략이 불가능한 경우
(1) 여러 타입의 매개변수가 혼합되어 있는 경우
(2) 함수형 인터페이스를 사용하는 경우
=> 반드시 매개변수 타입을 명시해줘야 한다.
람다 표현식의 장단점
장점
1. 코드가 간결해지고, 가독성이 좋아진다.
람다식을 사용하면, 불필요한 코드의 양을 줄일 수 있고, 코드가 짧고 직관적이어서 읽기 쉽다.
(특히, 스트림 API와 결합하는 경우 더욱 그러하다)
2. 유지보수가 쉬워진다.
중복 코드가 제거되고 한 줄의 표현식으로 추출 가능하기 때문에 코드의 유지보수성이 향상된다.
3. 병렬 처리 가능
스트림 API와 함께 사용 시 병렬 처리(parallelStream())가 가능하여 성능이 증가한다.
4. 함수형 프로그래밍(Functional Programming) 지원
람다식을 통해 메서드를 마치 변수처럼 사용 → 유연한 코드 작성이 가능해진다.
단점
1. 디버깅이 어렵다
람다식은 익명 함수 형태여서, 오류 발생 시 어떤 코드에서 문제가 생겼는지 추적하기가 어렵다.
2. 복잡한 로직에는 적합하지 않다
3. 재사용이 어렵다.
4. 함수형 인터페이스에만 사용 가능하다
(함수형 인터페이스에 대해서는 추후 포스팅하도록 하겠다.)
'Java' 카테고리의 다른 글
[Java] - 스트림(Stream) API란? (0) | 2025.02.14 |
---|---|
[Java] - ArrayList 기본 사용법 (0) | 2024.07.10 |
[Java] - 컬렉션(Collection) 이란? (0) | 2024.07.04 |