1. 함수형 인터페이스 란?
단 하나의 추상 메서드만 가지는 인터페이스 (Java 8부터 함수형 프로그래밍을 지원하기 위해 도입)
2. 특징
- 추상메서드가 하나 뿐인 인터페이스 (default 메서드나 static 메서드는 허용 됨.)
- 람다 표현식으로 구현 가능
- @FunctionalInterface 어노테이션을 사용하여 명시적으로 확인 가능
- java.util.function 패키지에서 기본 함수형 인터페이스 제공
Consumer<T> | 입력값을 받아서 처리하지만, 반환값은 없음 Consumer<String> print = (s) -> System.out.println(s); |
Function<T, R> | 입력값을 받아서 반환값을 생성 Function<String, Integer> length = (s) -> s.length(); |
Predicate<T> | 조건을 검사하고 boolean 값을 반환 Predicate<String> isNotEmpty = (s) -> !s.isEmpty(); |
Supplier<T> | 단순 값을 제공 Supplier<String> getString = () -> "Hello"; |
728x90
3. 사용 예시
함수형 인터페이스 생성
- @FunctionalInterface : 함수형 인터페이스 임을 명시적으로 표현 (생략 가능)
- run(String msg) : 유일한 추상 메서드
- print1(String msg) : default 메서드 이므로 함수형 인터페이스로 선언하는 데에 지장 없음.
- print2(String msg) : static 메서드 이므로 함수형 인터페이스로 선언하는 데에 지장 없음.
@FunctionalInterface
public interface MyFunction {
void run(String msg);
default void print1(String msg) {
System.out.println(msg);
}
static void print2(String msg) {
System.out.println(msg);
}
}
함수형 인터페이스 구현
- 출력: Functional Interface Test : Run!
public class FunctionalInterfaceExample {
public static void main(String[] args) {
MyFunction myFunction = (s) -> System.out.println("Functional Interface Test : " + s);
myFunction.run("Run!");
}
}
함수형 인터페이스 구현 + Bean 등록 간소화
@Configuration
public class MyConfig {
@Bean
public MyFunction<String, String> print() {
return (s) -> System.out.println("Functional Interface Test : " + s);
}
}
Stream API + java.util.function 패키지 사용
예시 : fruits List 에서 apple 인 항목만 추출하여 대문자로 출력하기
- Predicate<String> : apple 인 항목인지 검증 (조건 판단)
- Function<String, String> : 주어진 값을 대문자로 변환 (데이터 변환)
- Consumer<String> : 주어진 값을 출력 (출력)
- 출력 : Hello, APPLE
Hello, APPLE
public class StreamExample {
public static void main(String[] args) {
List<String> fruits = Arrays.asList("apple", "banana", "orange", "apple");
Predicate<String> isApple = (s) -> s.equals("apple");
Function<String, String> toUpperCase = (s) -> s.toUpperCase();
Consumer<String> printName = (name) -> System.out.println("Hello, " + name);
fruits.stream()
.filter(isApple)
.map(toUpperCase)
.forEach(printName);
}
}
4. 결론
- 함수형 인터페이스는 단 하나의 추상 메서드만 가진 인터페이스
- 주로 람다 표현식과 함께 사용
728x90
반응형
'Java' 카테고리의 다른 글
DB의 동시성(Concurrency) 제어와 트랜잭션 (0) | 2025.04.16 |
---|