목차
- Function
- Supplier
- Consumer
- Predicate
- Custom Functional Interface
자바에서 제공해주는 Functional 인터페이스중 가장 많이 사용되는 4가지 인터페이스를 알아보겠습니다.
1. Function<I, O>
I : input type
O : output type
I 라는 입력을 받아서 O라는 출력을 낸다. 라는 인터페이스입니다.
사용법은 아래와 같습니다.
Function<Integer, String> function = (i) -> "[" + i + "]";
String result = function.apply(3);
System.out.println("result = " + result);
결과 : result = [3]
2. Supplier<O>
O : output type
Function과는 다르게 input은 없고 output만 있는 인터페이스입니다.
사용법은 아래와 같습니다.
1. String Supplier
Supplier<String> supplier = () -> "Hello";
String str = supplier.get();
2. Account Supplier
Supplier<Account> supplier = Account::new;
Account account = supplier.get();
1. "Hello"라는 값을 제공하는 supplier를 만든다음에 get()을 통해 "Hello"라는 값을 받아온다.
2. Account의 기본 생성자를 supplier를 만듬다음에 get()을 통해 Account를 생성한다.
3. Consumer<I>
I : input type
Supplier와 반대로 입력만 있고 출력이 없는 인터페이스입니다.
print 메서드가 Consumer와 가장 유사하죠?
사용법은 아래와 같습니다.
Consumer<Integer> consumer = System.out::println;
consumer.accept(10);
결과 : 10
4. Predicate<I>
I : input type
input을 받아서 무조건 boolean을 리턴합니다.
String을 받아서 String에 문자가 존재하는지 판단하는 메서드를 만들어볼 수 있겠죠?
사용법은 아래와 같습니다.
Predicate<String> predicate = (s) -> s.trim().length() > 0;
System.out.println(predicate.test(" "));
결과 : false
추가. 함수형 인터페이스를 제작하는 방법을 알아보겠습니다.
코드부터 보시죠.
@FunctionalInterface
public interface MyPrinter {
void print(String prefix, String content, String suffix);
}
사실... 그냥 단순 Interface입니다. static 메서드를 제외한 추상 메서드가 하나이면 다 함수형 메서드라고 할 수 있죠.
여기서 @FucntionalInterface 는 추상 메서드를 2개 이상 만들면 컴파일 에러를 내주는 Vaildator 역할을 하는 어노테이션입니다.
코드의 Return값은 void로 지정했는데 제네릭 타입을 사용해도 무방합니다.
사용법 보시죠
public static void main(String[] args) {
MyPrinter myPrinter = (p, c, s) -> System.out.println(p + c + s);
myPrinter.print("[[[", " FINISH ", "]]]");
MyPrinter.lineBreak();
}
결과 : [[[ FINISH ]]]
막간을 이용해 함수형 인터페이스를 알아보았습니다.
감사합니다 (_ _)
'Java & Kotlin' 카테고리의 다른 글
자바의 Garbage Collection 이해와 성능 최적화 방법 (0) | 2023.07.30 |
---|---|
Lock과 Double Check Lock: 동시성 문제 해결을 위한 효율적 패턴 (0) | 2023.07.11 |
Java Functional Interface로 API 테스트 모듈 간결하게 만들기: 적용 사례와 코드 개선 (0) | 2023.07.11 |
Stack Overflow Error 발생 원인과 해결 방법: 재귀 호출 피하기 (0) | 2023.05.15 |
메서드 재실행 어노테이션을 만들자. 실무 & @Retryable (0) | 2023.04.14 |