Java 8에서 도입된 함수형 인터페이스와 람다 표현식은 함수형 프로그래밍 패러다임을 지원하고, 코드를 더 간결하고 가독성 있게 작성할 수 있도록 도와줍니다.
1. 함수형 인터페이스
함수형 인터페이스는 추상 메서드가 하나만 있는 인터페이스를 말합니다. 이러한 인터페이스는 @FunctionalInterface
어노테이션을 사용하여 명시적으로 표시할 수 있습니다. Java 8에서는 java.util.function
패키지에 많은 표준 함수형 인터페이스를 제공합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
@FunctionalInterface
public interface Predicate<T> {
boolean test(T t);
}
@FunctionalInterface
public interface Consumer<T> {
void accept(T t);
}
@FunctionalInterface
public interface Function<T, R> {
R apply(T t);
}
|
cs |
2. 람다 표현식
람다 표현식은 함수형 인터페이스의 인스턴스를 간결하게 표현하는 방법입니다. 람다 표현식을 사용하면 익명 클래스를 사용하는 것보다 코드를 더 간결하게 작성할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
|
// 익명 클래스를 사용한 예제
Predicate<Integer> isEven = new Predicate<Integer>() {
@Override
public boolean test(Integer i) {
return i % 2 == 0;
}
};
// 람다 표현식을 사용한 예제
Predicate<Integer> isEven = i –> i % 2 == 0;
|
cs |
3. 메서드 참조
메서드 참조는 기존 메서드를 람다 표현식으로 표현하는 방법입니다. 메서드 참조를 사용하면 코드를 더 간결하고 가독성 있게 작성할 수 있습니다.
1
2
3
4
5
|
// 람다 표현식을 사용한 예제
Function<String, Integer> strLength = str –> str.length();
// 메서드 참조를 사용한 예제
Function<String, Integer> strLength = String::length;
|
cs |
4. 스트림 API와 함께 사용
함수형 인터페이스와 람다 표현식은 Java 8의 스트림 API와 함께 사용할 때 더욱 강력합니다. 스트림 API는 컬렉션 요소를 필터링, 매핑, 정렬 등의 작업을 수행할 수 있는 기능을 제공합니다.
1
2
3
4
5
6
7
|
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> evenNumbers = numbers.stream()
.filter(i –> i % 2 == 0)
.collect(Collectors.toList());
System.out.println(“Even numbers: “ + evenNumbers);
|
cs |
5. 주요 함수형 인터페이스
Java 8에서 제공하는 주요 함수형 인터페이스는 다음과 같습니다.
Predicate<T>
: 인자를 받아 boolean 값을 반환하는 함수를 표현합니다.Consumer<T>
: 인자를 받아 처리하고 결과를 반환하지 않는 함수를 표현합니다.Function<T, R>
: 인자를 받아 처리하고 결과를 반환하는 함수를 표현합니다.Supplier<T>
: 인자를 받지 않고 결과를 반환하는 함수를 표현합니다.BiPredicate<T, U>
,BiConsumer<T, U>
,BiFunction<T, U, R>
: 두 개의 인자를 받는 버전의 함수형 인터페이스입니다.
1
2
3
4
|
Predicate<String> isEmpty = String::isEmpty;
Consumer<String> printString = System.out::println;
Function<String, Integer> strLength = String::length;
Supplier<Double> randomValue = Math::random;
|
cs |
함수형 인터페이스와 람다 표현식은 Java에서 함수형 프로그래밍 스타일을 적용할 수 있는 강력한 도구입니다. 이를 활용하면 코드를 더 간결하고 가독성 있게 작성할 수 있으며, 병렬 처리 등 고급 기능을 쉽게 구현할 수 있습니다.
- Oracle Java Documentation – Functional Interfaces
- Baeldung – Introduction to Functional Interfaces in Java
- GeeksforGeeks – Functional Interfaces in Java
- Oracle Java Documentation – Lambda Expressions
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.