JAVA/포스팅

자바 함수형 인터페이스

짜집퍼박사(짜박) 2023. 11. 22. 00:51

자바의 함수형 인터페이스(Functional Interface)는 딱 하나의 추상 메서드를 가진 인터페이스를 말합니다. 이러한 인터페이스는 람다식과 함께 자주 사용되며, 함수형 프로그래밍을 지원하는 중요한 개념 중 하나입니다.

 

함수형 인터페이스의 특징

1. 하나의 추상 메서드: 함수형 인터페이스는 정확히 하나의 추상 메서드를 가져야 합니다. 하나의 메서드를 가지는 것이 함수형 프로그래밍의 핵심이며, 이를 통해 람다식이 사용될 수 있습니다.
2. @FunctionalInterface 애너테이션: 함수형 인터페이스를 선언할 때 @FunctionalInterface 애너테이션을 사용하면 해당 인터페이스가 함수형 인터페이스임을 명시적으로 표현할 수 있습니다. 이 애너테이션은 필수는 아니지만, 문서화와 같은 목적으로 사용됩니다.

 

자주 사용되는 함수형 인터페이스

1. Runnable

@FunctionalInterface
public interface Runnable {
    void run();
}

2. Callable<V>

@FunctionalInterface
public interface Callable<V> {
    V call() throws Exception;
}

3. Comparator<T>

@FunctionalInterface
public interface Comparator<T> {
    int compare(T o1, T o2);
}

4. Supplier<T>

@FunctionalInterface
public interface Supplier<T> {
    T get();
}

5. Consumer<T>

@FunctionalInterface
public interface Consumer<T> {
    void accept(T t);
}

6. Function<T, R>

@FunctionalInterface
public interface Function<T, R> {
    R apply(T t);
}

7. Predicate<T>

@FunctionalInterface
public interface Predicate<T> {
    boolean test(T t);
}

 

사용 예제

1. 람다식을 사용한 Runnable 구현

Runnable myRunnable = () -> System.out.println("Hello, Functional Interface!");

2. Comparator를 이용한 정렬

List<String> names = Arrays.asList("John", "Alice", "Bob", "Charlie");

// 람다식을 이용한 Comparator 구현
Collections.sort(names, (s1, s2) -> s1.compareTo(s2));

3. Function을 이용한 데이터 변환

Function<String, Integer> stringLength = s -> s.length();
int length = stringLength.apply("Hello, World!"); // 13

4. Predicate를 이용한 데이터 필터링

List<String> names = Arrays.asList("John", "Alice", "Bob", "Charlie");

// 람다식을 이용한 Predicate 구현
List<String> filteredNames = names.stream()
                                  .filter(s -> s.startsWith("A"))
                                  .collect(Collectors.toList());

함수형 인터페이스와 람다식을 사용하면 코드가 간결해지고 가독성이 좋아지며, 함수형 프로그래밍의 장점을 살릴 수 있습니다.

 

With ChatGPT

'JAVA > 포스팅' 카테고리의 다른 글

자바 Function의 합성  (0) 2023.11.22
자바 java.util.function패키지  (0) 2023.11.22
자바 람다식 작성하기  (0) 2023.11.22
자바 람다식  (0) 2023.11.22
자바 쓰레드 fork 프레임웍  (0) 2023.11.22