Java
Programming Language
Backend
☕️[Java] 람다(Lambda).
1️⃣ 람다 표현식(Lambda Expression)
- Java 8에서 도입된 기능으로, 익명 함수(Anonymous Function)를 간결하게 표현한 것입니다.
- 람다 표현식은 메서드로 전달되거나, 변수에 할당될 수 있는 짧은 형태의 코드를 작성할 수 있게 해줍니다.
- 주로 함수형 인터페이스(Functional Interface)를 구현하는 데 사용되며, Java에서 함수형 프로그래밍 스타일을 가능하게 합니다.
2️⃣ 람다 표현식의 기본 구조.
- 람다 표현식은 다음과 같은 형태로 작성됩니다.
(parameters) -> expression
혹은
(paramters) -> { statements; }
-
매개변수 목록(parameters)
- 메서드처럼 전달받을 인자를 정의합니다.
- 인자가 하나인 경우 괄호
()
를 생략 할 수 있습니다.
-
화살표 연산자
->
- 람다 표현식의 매개변수와 본문(body)을 구분합니다.
-
본문(body)
- 람다가 실행할 코드를 정의합니다.
- 단일 표현식일 경우 중괄호
{}
를 생략할 수 있으며, 여러 문장일 경우 중괄호 {}
로 묶습니다.
3️⃣ 예시
// 기존 익명 내부 클래스 방식
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("Hello, Lambda!");
}
};
// 람다 표현식 사용
Runnable lambdaRunnable = () -> System.out.prinln("Hello, Lambda!");
// 기존 방식
Comparator<Integer> comparator = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1.compareTo(o2);
}
}
// 람다 표현식 사용
Comparator<Integer> lambdaComparator = (o1, o2) -> o1.compareTo(o2);
- 위 코드에서
Comparator
인터페이스를 구현하는 익명 내부 클래스를 람다 표현식으로 대체했습니다.
- 두 개의 매개변수
o1
과 o2
를 비교하는 코드를 람다 표현식으로 간결하게 작성할 수 있습니다.
4️⃣ 함수형 인터페이스와 람다.
- 람다 표현식은 함수형 인터페이스를 구현하는 데 사용됩니다.
- 함수형 인터페이스는 단 하나의 추상 메서드만을 가지는 인터페이스로,
@FuncationalInterface
애노테이션으로 명시할 수 있습니다.
예시: 함수형 인터페이스
@FunctionalInterface
interface MyFuncationalInterface {
void doSomething();
}
public class Main {
public static void main(String[] args) {
MyFunctionalInterface myFunc = () -> System.out.println("Doing something!");
myFunc.doSomething(); // 출력: Doing something!
}
}
- 위 코드에서
MyFunctionalInterface
는 함수형 인터페이스이며, 람다 표현식 () -> System.out.println("Doing something!")
은 이 인터페이스의 doSomething()
메서드를 구현합니다.
5️⃣ 자주 사용되는 함수형 인터페이스
- Java 8에서는 자주 사용되는 함수형 인터페이스들이
java.util.function
패키지에 포함되어 있습니다.
-
Predicate<T>
: T
타입의 인자를 받아서 boolean
을 반환하는 함수입니다.
Predicate<String> isEmpty = s -> s.isEmpty();
-
Function<T, R>
: T
타입의 인자를 받아 R
타입의 결과를 반환하는 함수입니다.
Function<Integer, String> intToString = i -> Integer.toString(i);
-
Consumer<T>
: T
타입의 인자를 받아서 소비하는(반환값이 없는) 함수입니다.
Consumer<String> print = s -> System.out.println(s);
-
Supplier<T>
: 인자를 받지 않고 T
타입의 결과를 반환하는 함수입니다.
Supplier<Double> randomValue = () -> Math.random();
6️⃣ 장점.
-
1. 코드 간결화 : 람다 표현식을 사용하면 코드가 훨씬 간결해지고 가독성이 좋아집니다.
-
2. 지연 실행 : 람다 표현식을 통해 코드를 지연 실행할 수 있어 성능 최적화에 유리합니다.
-
3. 병렬 처리 : 스트림 API와 함께 사용하여 병렬 처리 작업을 쉽게 구현할 수 있습니다.
7️⃣ 요약.
- 람다 표현식은 익명 함수의 일종으로, 함수형 인터페이스를 구현하는 간결한 방법을 제공합니다.
- 이를 통해 코드의 가독성과 유지보수성이 향상되며, 함수형 프로그래밍 패러다임을 Java에서 더욱 효과적으로 활용할 수 있게 됩니다.