자바 API의 함수적 인터페이스

JinJinJara·2023년 11월 11일
0

TIL

목록 보기
14/19

함수적 인터페이스

메서드의 매개변수에 사용되는 함수적 인터페이스

  • 자주 사용하는 기능을 정의 할 수 있는 함수 제공

표준형 함수적 인터페이스

Consumer<T>Supplier<T>Predicate<T>Function<T,R>
입력OXT타입
출력XOT/FR타입
설명입력에 대한 T/F 반환T타입을 R타입으로 변환

확장형 함수적 인터페이스

Consumer<T>Supplier<T>Predicate<T>Function<T,R>
BooleanSupplier
IntConsumerIntSupplierIntPredicateIntFunction
LongConsumerLongSupplierLongPredicateLongFunction
DoubleConsumerDoubleSupplierDoublePredicateDoubleSupplier
BiConsumer<T,U>BiPredicate<T,U>BiFunction<T,U,R>
  • IntConsumer<T> : 입력은 Int형이지만 출력은 없음
  • BooleanSupplier : 입력은 없지만 출력이 Boolean 형
  • BiFunction<T,U,R> : 입력은 T와 U 타입이지만 R 타입으로 출력
  • Function<T,R> 확장형 추가 : ToIntFunction<T>, ToLongFunction<T>, ToDoubleFunction<T>,

UnaryOperator<T>

XXXOperator 은 입력 매개변수의 연산 결과가 동일한 타입으로 리턴하는 기능

  • Function<T, R> 에서 R이 T 로 바뀌었다고 같다.
    • 사실 Function 인터페이스를 상속한 것이다.
      ex) public interface UnaryOperator<T> extends Function<T, T>
  • UnaryOperator : 입력T -> 출력T
  • BiaryOperator : 입력T, T -> 출력T

예제

1. 표준형 Consumer<T> 함수적 인터페이스

interface Consumer<T> {
	public abstract void accept(T t);
}

// 익명이너클래스
Consumer<String> c = new Consumer<String>(){
	@Override
    public void accept(String t){
    	System.out.println(t);
    }
}

// 람다식
Consumer<String> c1;
c1 = (word)->System.out.println(word);
c1.accept("테스트 입니다. ");

2. 확장형 Consumer<T> 함수적 인터페이스

IntConsuer c2 = (num)->System.out.println("값 : "+num);
BiConsuer<String, Integer> c3 = (name, age)->System.out.println("이름 : "+name+ "나이 : "+age);

c2.accept(3);
c3.accept("진진자라", 10);

📌Tip

  • 리턴타입이 기본자료형이 아니거나, 확장형 인터페이스의 리턴타입이 모두 동일한 경우
    인터페이스 메서드명은 동일!

    • 확장형 Consumer<T> 는 모두 accept()

리턴 타입이 기본자료형이면서 서로 다른 타입을 갖고 있을 때 메서드 명은 다를 수 있다!


확장형 Supplier<T> 함수정 인터페이스

getAsBoolean();
getAsInt();
getAsLong();
getAsDouble();

📌Tip

  • 리턴타입이 기본자료형이면서, 확장형 인터페이스의 리턴타입이 다른 경우
    인터페이스 메서드명은 다름!

  • 기본메서드AS리턴타입명


표준형 Predicate<T> 함수정 인터페이스

  interface Predicate<T>{
  	public abstract boolean test(T t);
  }

  Predicate<String> p1;
  p1 = (word)->(word.length()>1) ? true : false;
  System.out.println(p1.test("안녕");

📌Tip

  • 리턴타입이 기본자료형이 아니거나, 확장형 인터페이스의 리턴타입이 모두 동일한 경우
    인터페이스 메서드명은 동일함!

  • 확장형 Predicate<T> 는 모두 test()

0개의 댓글