[Java] 자바에서 제공하는 함수형 인터페이스

Junseo Kim·2021년 1월 30일
0

[Java]자바 기초

목록 보기
26/35

자바에서 기본으로 제공하는 함수형 인터페이스

제네릭 파라미터에는 참조형만 사용할 수 있다.

Function<T, R>

T타입의 값을 받아서 R타입의 객체를 리턴하는 함수. apply 메소드만 구현하면 된다. 객체에서 선택 / 추출에 쓰인다.

Function<Integer, String> integerToString = (number) -> Integer.toString(number);
System.out.println(integerToString.apply(10));
(String s) -> s.length()

.compose()와 .andThen()을 사용해서 함수를 조합할 수 있다.

  • .compose(Function): 매개변수로 넘어온 Function부터 처리 후, 결과 값을 호출한 Function에서 사용
        Function<Integer, String> integerToString = (number) -> Integer.toString(number);
        Function<Integer, Integer> plusTen = (number) -> number + 10;

        Function<Integer, String> compose = integerToString.compose(plusTen); // plusTen 부터 수행후 결과값을 integerToString에서 사용
        
        System.out.println(compose.apply(10));
  • .andThen(Function): 호출한 Function의 결과값을 매개변수로 넘어온 Function에서 사용.
        Function<Integer, String> integerToString = (number) -> Integer.toString(number);
        Function<String, Integer> stringToInteger = (string) -> Integer.parseInt(string);

        Function<Integer, Integer> integerIntegerFunction = integerToString.andThen(stringToInteger); // integerToString부터 수행 후 결과 값을 stringToInteger에서 사용
        
        System.out.println(integerIntegerFunction.apply(10));

BiFunction<T, U, R>

Bi가 붙은 함수형인터페이스는 매개변수가 2개이다. BiFunction말고도 BiPredicate, BiConsumer가 존재한다.

T타입의 값과, U타입의 값을 매개변수로 받아서 R타입의 값을 리턴한다.

Consumer< T >

T타입의 값을 매개변수로 받고 리턴값은 없다. accept메소드를 구현하면 된다.
객체에서 소비에 쓰인다.

(Apple a) -> System.out.println(a.getWeight())

Supplier< T >

매개변수는 없고, T타입의 값을 반환한다. get메소드를 구현하면 된다.
객체 생성에 쓰인다.

() -> new Apple(10)

Predicate< T >

test라는 추상 메서드를 정의한다.
T타입의 값을 매개변수로 받아서 true나 false를 리턴한다. 불리언 표현에 쓰인다.

(List<String> list) -> list.isEmpty()

아래의 메소드들로 조합해서 사용할 수 있다.

  • .negate(): not을 뜻함
  • .or(): or을 뜻함
  • .and(): and를 뜻함

UnaryOperator< T >

Funtion<T, R>의 T타입과 R타입이 같은 타입인 경우 UnaryOperator< T >로 사용할 수 있다.

Funtion을 상속받았기 때문에 compose나 andThen도 사용할 수 있다.

BinaryOperator< T >

BiFunction<T, U, R>의 T타입, U타입, R타입이 모두 같은 경우 BinaryOperator< T >로 사용할 수 있다.

0개의 댓글