백엔드 개발자 2024. 8. 11. 12:04

 

메소드 참조


  • 람다식 코드를 간편화 하는 것
    1. 메소드 1개만 호출할 경우
    2. 람다식과 메서드의 의미가 사실상 같은 경우
    3. 인터페이스와 메서드가 인자, 리턴값 구성이 동일할 경우

 

 

예시

# 클래스 메소드 호출
{클래스명}::{클래스 메소드명}

# 인스턴스 메소드 호출
{클래스명}::{인스턴스메소드명}
{인스턴스}::{인스턴스메소드명}

# 클래스 생성자 호출
{클래스}::new

 

 

 

 

		//  클래스의 클래스 메소드에 인자 적용하여 실행
        Function<Integer, String> intToStrLD = (i) -> String.valueOf(i);
        Function<Integer, String> intToStrMR = String::valueOf;
        String intToStr = intToStrMR.apply(123);

 

  • String.valueOf()는 int를 인자로 받아서 String을 리턴한다.
  • Function<a,b>는 a를 인자, b를 반환타입으로 하므로 valueOf와 일치한다.
  • 메서드 1개만 사용하므로, 메서드 참조로 줄일 수 있는 것이다.

 

 

 

 

어려우면 IDE 자동 수정 기능이 있으니 람다식 정도까지만 고려하자. 알아서 바꿔줄 수 있으니!

 

 

예시


 

public class Button {
    private String text;
    public Button(String text) { this.text = text; }
    public Button(String text, String sound) {
        this(text);
        onClickListener = () -> System.out.println(sound + " " + sound);
    }
    public String getText() { return text; }

    private Runnable onClickListener;
    public void setOnClickListener(Runnable onClickListener) {
        this.onClickListener = onClickListener;
    }
    public void onClick () {
        onClickListener.run();
    }
}

 

 

				//  클래스의 생성자 실행
        Function<String, Button> strToButtonLD = s -> new Button(s);
        Function<String, Button> strToButtonMR = Button::new;
        Button button1 = strToButtonMR.apply("Dog");
  • Function은 1번째 인자, 2번째 반환값. Button 생성자도 String 인자, 반환 Button 객체이므로 메서드 참조가 성립한다.

 

 

				System.out.println("\n- - - - -\n");

				//  현존하는 인스턴스의 메소드 실행
        Runnable catCryLD = () -> button2.onClick();
        Runnable catCryMR = button2::onClick;
        catCryMR.run();
  • onClick은 인스턴스의 메서드이므로, 인스턴스명::메서드로 변환한다.

 

 

 

번외

				//  💡 임의의 인스턴스의 메소드 참조
        TreeSet<String> treeSetLD = new TreeSet<>((s1, s2) -> s1.compareTo(s2));
        TreeSet<String> treeSetMD = new TreeSet<>(String::compareTo);
  • 임의의 인스턴스메서드를 참조하는 케이스. (이런 것도 있다는 느낌으로 참고만. 어차피 IDE가 바꿔줌)

 

 

출처 

 

학습 페이지

 

www.inflearn.com