Java 8에서 도입된 람다 표현식은 간단하게 말해 익명 함수를 나타내는 방법입니다. 람다 표현식을 사용하면 코드를 간결하게 표현할 수 있고, 컬렉션 처리, 스레드 작업, 이벤트 핸들링 등 다양한 상황에서 유용하게 활용할 수 있습니다.
람다 표현식의 기본 구조는 다음과 같습니다:
(매개변수 목록) -> { 표현식 또는 코드 블록 }
예를 들어, 두 숫자를 더하는 간단한 람다 표현식을 살펴보겠습니다:
(int a, int b) -> a + b
이렇게 작성된 람다 표현식은 함수와 비슷한 역할을 하며, 매개변수로 전달된 값을 가지고 표현식을 계산하거나 코드 블록을 실행합니다.
람다 표현식은 주로 함수형 인터페이스와 함께 사용됩니다. 함수형 인터페이스란 단 하나의 추상 메서드를 가지는 인터페이스를 말합니다. 예를 들어, Runnable, Callable, Comparator 등이 함수형 인터페이스의 예입니다.
람다 표현식을 사용한 간단한 예제를 보겠습니다. 정렬을 위해 Comparator 인터페이스를 구현하는 경우:
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
Collections.sort(names, (a, b) -> a.compareTo(b));
람다 표현식을 사용하면 익명 클래스를 생성하지 않고도 코드를 간결하게 작성할 수 있습니다. 이를 통해 가독성을 높이고 작업을 간편하게 수행할 수 있습니다.
함수형 인터페이스는 단 하나의 추상 메서드를 가지는 인터페이스를 말합니다. Java에서 함수형 프로그래밍을 지원하려면 이러한 함수형 인터페이스를 활용하여 람다 표현식이나 메서드 참조를 사용할 수 있습니다. Java 8에서는 @FunctionalInterface
어노테이션을 통해 함수형 인터페이스를 선언할 수 있습니다.
예시 코드를 통해 함수형 인터페이스를 이해해 보겠습니다. Runnable
인터페이스는 함수형 인터페이스의 예입니다. 이 인터페이스는 단 하나의 추상 메서드인 run()
을 가지며, 스레드를 실행하는 데 사용됩니다.
public class FunctionalInterfaceExample {
public static void main(String[] args) {
// Runnable 함수형 인터페이스 사용
Runnable runnable = () -> {
for (int i = 0; i < 5; i++) {
System.out.println("Count: " + i);
}
};
// 스레드 실행
Thread thread = new Thread(runnable);
thread.start();
}
}
위 예제에서 runnable
은 람다 표현식을 사용하여 Runnable
인터페이스를 구현합니다. 이렇게 하면 run()
메서드의 내용을 정의할 수 있습니다.
또 다른 예시로, Comparator
인터페이스를 사용해보겠습니다. 이 인터페이스는 두 개의 객체를 비교하는 데 사용됩니다.
import java.util.*;
public class ComparatorExample {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
// Comparator 함수형 인터페이스 사용
Comparator<String> lengthComparator = (a, b) -> Integer.compare(a.length(), b.length());
// 리스트 정렬
Collections.sort(names, lengthComparator);
System.out.println(names); // 출력: [Bob, Alice, Charlie]
}
}
위 예제에서 lengthComparator
는 람다 표현식을 사용하여 Comparator
인터페이스를 구현합니다. 이를 사용하여 문자열의 길이를 비교하고, Collections.sort()
를 통해 리스트를 정렬합니다.
이렇듯 함수형 인터페이스를 사용하면 람다 표현식을 통해 간결하고 효율적인 코드를 작성할 수 있습니다.