Java & Kotlin

Java에서 제공해주는 Functional Interface

백엔드 유성 2023. 4. 30. 20:25

목차

  1. Function
  2. Supplier
  3. Consumer
  4. Predicate
  5. 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 ]]]

 

막간을 이용해 함수형 인터페이스를 알아보았습니다.

감사합니다 (_ _)