함수형 인터페이스

개발세발·2024년 1월 4일
0

함수형 인터페이스

  • 1개의 추상 메소드를 갖는 인터페이스
    2개의 추상 메소드가 있다면 함수형 인터페이스가 아니다.

  • 구현된 함수형 인터페이스는 @FunctionalInterface를 표시하여 요건을 검증할 수 있다.

사용 이유

  • 람다 표현식 지원
  • 메서드 참조
  • StreamAPI와의 통합
  • 병렬 프로그래밍
  • 코드 재사용

종류

  • Predicate: 인자를 받아 Boolean 타입을 리턴하는 인터페이스를 제공. Predicate<T> T는 타입.

  • Consumer: 인자를 하나 받고 리턴은 없는 인터페이스, void accept(T t)를 제공.

  • Supplier는 인자를 받지 않고 T 타입의 객체를 리턴하는 인터페이스, T get() 메소드를 제공.

  • Function은 T 타입의 인자를 받아 R 타입의 객체를 리턴하는 인터페이스

참조 방법

package functionalInferface;

@FunctionalInterface
public interface Converter<F, T> {
T convert (F from);
}

public class IntegerUtils {
//static method
public static int stringInt(String s){
return Integer.parseInt(s);
}
//instance method: 인스턴스 생성 후, '참조 변수.메소드명()'으로 호출
//객체를 먼저 생성해주어야 하는 메소드
public int stringtoInt(String s){
return Integer.parseInt(s);
}
}

  1. 정적 메서드 참조: 클래스명::메서드명
    //정적 메서드 참조(클래스명::메서드명)
    Converter<String, Integer> converter = IntegerUtils::stringInt;
    Integer result = converter.convert("333");
    System.out.println(result);
  2. 인스턴스 메서드 참조(객체 참조::메서드명)
    //인스턴스 메서드 참조 (참조 객체::메서드명)
    IntegerUtils integer = new IntegerUtils();
    Converter<String, Integer> converter1 = integer::stringtoInt;
    converter1.convert("33322")
  3. 특정 객체의 인스턴스 메서드 참조: 클래스명::메서드명
    //특정 객체의 인스턴스 메서드를 참조 (클래스명::메서드명)
    List<String> arrays = Arrays.asList("라","가", "나", "다");
    Collections.sort(arrays, String::compareTo);
    System.out.println("arrays = " + arrays);
  4. 생성자 참조: 클래스명:new

0개의 댓글