람다식 메서드 참조 ::

이리·2025년 2월 10일
0
post-thumbnail

메소드 참조(Method Reference)란 실행하려는 메소드를 참조해서 매개 변수의 정보 및 리턴 타입을 알아내어 람다식에서 굳이 선언이 불필요한 부분을 생략하는 것을 말합니다.

(String a) → System.out.println(a)

System.out::println

메소드 참조 조건과 타입 추론

위 처럼 문법 함축이 가능한 이유는 컴파일러가 람다식의 타입을 추론하기 때문입니다. 인터페이스의 추상 메서드 형태와 반환 메서드의 시그니처 형태가 같으면 됩니다.

람다식의 메소드 참조 문법을 사용하기 위해서는 다음의 3가지 조건을 만족하면 된다.
  • 함수형 인터페이스의 매개변수 타입 == 메소드의 매개변수 타입
  • 함수형 인터페이스의 매개변수 개수 == 메소드의 매개변수 개수
  • 함수형 인터페이스의 반환 타입 == 메소드의 반환 타입

메서드 참조 종류

  1. 정적 메서드 참조

    정적 메서드를 호출할 경우 :: 기호 앞에 클래스명을 그대로 기재하는 것이 특징

    Function<String, Integer> stringToInt;
    
    // 람다
    stringToInt = (str) -> Integer.parseInt(str);
    // 메서드 참조 
    stringToInt = Integer::parseInt;
    
    • 함수형 인터페이스 Function<T, R> → 입력 타입 T를 입력받아서 R을 반환한다.
      • compose(): firstFunc.andThen(secondFunc) → first 실행하고 second를 실행
      • andThen(): secondFunc.compose(firstFunc) → first를 먼저 실행하고 그 결과를 second에 적용
      • identity()
  2. 인스턴스 메서드 참조

    List<Number> lsit = new ArrayList<>();
    Consumer<Collection<Number>> addElements; 
    
    // 람다
    addElements = (arr) -> list.addAll(arr);
    
    // 메서드 참조 
    addElements = list::addAll; 
    

    Consumer Interface
    제네릭 타입의 매개변수를 받아 특정 작업을 수행해야 하는 경우 사용
    매개변수를 사용하고 아무것도 생성(반환)하지 않음

  3. 매개변수의 메서드 참조

    매개변수의 메서드를 참조할때, 매개변수의 클래스 타입명을 기재하는 것이 특징

    Function<String, Integer> size;
    
    // 람다 
    size = (String s1) -> s1.length();
    
    // 메서드 참조 
    size = String::length;
  1. 생성자 참조

    생성자도 일종의 메서드이기 때문에 메서드 참조가 가능합니다. 리턴 값이 단순히 새로운 객체를 생성하는 것이기 때문이죠

    BiFunction<Integer, Integer, Object> contructor;
    
    // 람다 
    constructor = (x, y) -> new Object(x, y);
    
    // 메서드 참조
    constructor = Object::new

    BiFunction<T, U, R>
    두개의 입력(T,U)을 받아서 하나의 결과(R)을 반환하는 함수

0개의 댓글

관련 채용 정보