자바 8부터 람다식(lambda expression)이라는 강력한 기능이 도입되어 함수형 프로그래밍을 더욱 쉽게 할 수 있게 되었습니다. 람다식은 코드를 간결하게 작성하고, 함수를 변수처럼 다룰 수 있는 방법을 제공합니다. 이번 블로그에서는 자바 람다식에 대해 자세히 알아보고, 간단한 예제 코드를 통해 설명하겠습니다.
람다식이란?
람다식은 익명 함수(anonymous function)를 정의하는 방법입니다. 이는 메서드의 매개변수로 전달하거나, 변수에 할당하거나, 다른 함수 내부에서 사용할 수 있습니다. 람다식은 매우 간결하며 코드를 더 읽기 쉽게 만들어줍니다.
람다식의 기본 구조는 다음과 같습니다.
(매개변수) -> { 실행문 }
예를 들어, 두 개의 정수를 더하는 람다식은 다음과 같이 작성할 수 있습니다.
(int a, int b) -> { return a + b; }
람다식의 활용
1. 함수형 인터페이스
람다식은 주로 함수형 인터페이스(functional interface)와 함께 사용됩니다. 함수형 인터페이스는 하나의 추상 메서드만을 가지는 인터페이스를 의미합니다. 예를 들어, Runnable, Callable, Comparator 등이 함수형 인터페이스입니다.
// Runnable 인터페이스의 람다식 활용
Runnable runnable = () -> {
System.out.println("Hello, Lambda!");
};
2. 컬렉션 처리
람다식을 사용하면 컬렉션 처리가 더 간결해집니다. 예를 들어, 리스트의 모든 요소를 출력하는 코드는 다음과 같이 작성할 수 있습니다.
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
names.forEach(name -> System.out.println(name));
3. 스레드 처리
람다식은 다중 스레드 프로그래밍에서도 유용하게 활용됩니다. 스레드를 간단하게 생성하고 실행할 수 있습니다.
Thread thread = new Thread(() -> {
for (int i = 0; i < 10; i++) {
System.out.println("Thread: " + i);
}
});
thread.start();
예제 코드
이제 간단한 예제 코드를 통해 람다식의 사용법을 확인해보겠습니다. 두 수를 더하는 람다식과 함수형 인터페이스를 사용한 예제입니다.
// 함수형 인터페이스 정의
@FunctionalInterface
interface Calculator {
int calculate(int a, int b);
}
public class LambdaExample {
public static void main(String[] args) {
// 람다식을 사용한 두 수 더하기
Calculator addition = (a, b) -> a + b;
int result = addition.calculate(5, 3);
System.out.println("5 + 3 = " + result);
}
}
이 코드는 간단한 람다식을 정의하고 함수형 인터페이스를 사용하여 두 수를 더한 결과를 출력합니다.
핵심 요약
- 익명 함수: 람다식은 익명 함수를 정의하는 방법으로, 이름 없이 함수를 생성할 수 있습니다.
- 간결한 문법: 매개변수와 실행문으로 구성된 람다식은 코드를 간결하게 표현할 수 있으며, 중괄호와 return 문을 생략할 수도 있습니다.
- 함수형 인터페이스: 주로 함수형 인터페이스와 함께 사용되며, 함수형 인터페이스는 하나의 추상 메서드를 가지는 인터페이스를 의미합니다.
- 컬렉션 처리: 람다식을 사용하면 컬렉션 처리가 간단해지며, forEach 메서드 등을 통해 컬렉션 요소를 반복 처리할 수 있습니다.
- 다중 스레드 프로그래밍: 람다식을 이용하여 스레드를 간단하게 생성하고 실행할 수 있으며, 병렬 프로그래밍을 지원합니다.
람다식은 자바 프로그래밍을 더욱 간결하고 읽기 쉽게 만들어주며, 함수를 변수처럼 다룰 수 있어 함수형 프로그래밍 패러다임을 쉽게 적용할 수 있게 합니다.
'Java > Java이론' 카테고리의 다른 글
자바 입출력 스트림(Java I/O Streams) (0) | 2023.11.10 |
---|---|
자바 스트림(Stream) (0) | 2023.11.07 |
자바 컬렉션 (0) | 2023.11.05 |
제네릭 (0) | 2023.11.04 |
열거형(Enum), 가변인수(Varargs), 어노테이션(Annotation) (1) | 2023.11.02 |