Java 8부터 도입된 표준 함수적 인터페이스는 `java.util.function` 패키지에서 제공되며, 함수형 프로그래밍을 지원하기 위해 설계된 인터페이스들입니다.
이들 인터페이스는 람다 표현식과 함께 사용되며, 다양한 작업(조건 검사, 데이터 변환, 소비 등)을 간결하게 처리할 수 있도록 도와줍니다.
### Java 표준 함수적 인터페이스
다음은 Java 표준 함수적 인터페이스의 주요 유형과 그 특징입니다:
#### 1. Predicate<T>
- 목적: 조건을 검사하여 `true` 또는 `false`를 반환.
- 추상 메서드: `boolean test(T t)`
- 사용 예: 리스트에서 필터링, 특정 조건 확인.
Predicate<Integer> isEven = num -> num % 2 == 0;
System.out.println(isEven.test(4)); // 출력: true
System.out.println(isEven.test(5)); // 출력: false
- 기본 제공 메서드:
- `and()`, `or()`, `negate()`: 조건 조합 가능.
#### 2. Function<T, R>
- 목적: 입력값(T)을 출력값(R)으로 변환.
- 추상 메서드: `R apply(T t)`
- 사용 예: 데이터 변환, 문자열 길이 계산 등.
Function<String, Integer> stringLength = str -> str.length();
System.out.println(stringLength.apply("Lambda")); // 출력: 6
- 기본 제공 메서드:
- `compose()`, `andThen()`: 함수 조합 가능.
#### 3. Consumer<T>
- 목적: 입력값(T)을 소비하고 반환값은 없음.
- 추상 메서드: `void accept(T t)`
- 사용 예: 로깅, 출력, 데이터 처리.
Consumer<String> printMessage = msg -> System.out.println(msg);
printMessage.accept("Hello, Java!"); // 출력: Hello, Java!
- 기본 제공 메서드:
- `andThen()`: 여러 작업 연결 가능.
#### 4. Supplier<T>
- 목적: 값을 생성하고 반환(입력값 없음).
- 추상 메서드: `T get()`
- 사용 예: 데이터 제공, 디폴트 값 반환.
Supplier<Double> randomValue = () -> Math.random();
System.out.println(randomValue.get()); // 출력: 임의의 난수
#### 5. UnaryOperator<T>
- 목적: 입력값을 받아 동일한 타입의 결과를 반환. (`T → T`)
- 추상 메서드: `T apply(T t)`
- 사용 예: 값 변환(예: 숫자 증가).
UnaryOperator<Integer> square = num -> num * num;
System.out.println(square.apply(5)); // 출력: 25
#### 6. BinaryOperator<T>
- 목적: 두 입력값을 받아 동일한 타입의 결과를 반환. (`(T, T) → T`)
- 추상 메서드: `T apply(T t1, T t2)`
- 사용 예: 두 숫자의 합, 최대값 계산.
BinaryOperator<Integer> sum = (a, b) -> a + b;
System.out.println(sum.apply(3, 7)); // 출력: 10
### 추가 인터페이스
1. BiPredicate<T, U>
- 두 개의 입력값(T, U)을 받아 조건을 검사.
- 메서드: `boolean test(T t, U u)`
2. BiFunction<T, U, R>
- 두 개의 입력값(T, U)을 받아 결과값(R)을 반환.
- 메서드: `R apply(T t, U u)`
3. BiConsumer<T, U>
- 두 개의 입력값(T, U)을 소비하고 반환값 없음.
- 메서드: `void accept(T t, U u)`
### 장점
- 가독성: 람다 표현식과 결합하여 간결하고 명확한 코드 작성 가능.
- 재사용성: 일반적인 작업(필터링, 변환 등)을 위한 표준화된 인터페이스 제공.
- 유연성: 함수 조합이나 동적 처리에 유용.
'프로그래밍 > Java' 카테고리의 다른 글
자바 스트림 (2) | 2025.06.12 |
---|---|
디자인패턴 - Command 패턴 (0) | 2025.04.10 |
디자인패턴 - Strategy 패턴 (0) | 2025.04.10 |
디자인패턴 (0) | 2025.04.09 |
Optional (0) | 2025.04.08 |