함수형 인터페이스와 람다 표현식

 

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(12345678910);
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에서 함수형 프로그래밍 스타일을 적용할 수 있는 강력한 도구입니다. 이를 활용하면 코드를 더 간결하고 가독성 있게 작성할 수 있으며, 병렬 처리 등 고급 기능을 쉽게 구현할 수 있습니다.

 

밀크바오밥 헤어트리트먼트 화이트머스크향, 1L, 1개
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

 

 

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다