메소드 레퍼런스

구름코딩·2020년 9월 30일
0

java8 _ 더 자바

목록 보기
5/23

사용

람다가 하는일이 기존 메소드 또는 생성자르 호출하는 것이라면 메소드 레퍼런스를 사용해서 매우 간결하게 표현 할 수 있다

메소드 참조하는 법

생성자 참조 -> 타입::new
스태틱 메소드 참조 -> 타입::스태틱 메소드
특정 객체의 인스턴스 메소드 참조 -> 객체 레퍼런스::인스턴스 메소드
임의 객체의 인스턴스 메소드 참조 -> 타입::인스턴스 메소드

메소드 또는 생성자의 매개변수로 람다의 입력값을 받는다
리턴값 또는 생성한 객체는 람다의 리턴값이다

메소드 레퍼런스 사용이전

UnaryOperator<String> hi = (s) -> "hi" + s;

메소드 레퍼런스 사용

  • 같은 기능을 메소드로 가진 Greeting클래스의 메소드를 참조
UnaryOperator<String> hi = Greeting::hi
  • 생성자에 대한 메소드 레퍼런스 : 입력값은 없고 반환값(타입자체)은 있는 경우
Supplier<Greeting> newGreeting = Greeting::new;
Greeting greeting = newGreeting.get();
  • 입력값이 있는 생성자에 대한 메소드 레퍼런스
Function<String, Greeting> woonGreeting = Greeting::new;
Greeting woon = woonGreeting.apply("woonsik");
  • 특정 타입의 불특정 다수의 인스턴스의 메소드를 참조하는 법
String[] names = {"wchoi", "dnstlr", "choi"};

//기존에 사용하던 함수형 인터페이스의 추상메소드 사용

Arrays.sort(names, new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
  		if (o1 == o2)
  			return 1;
  		else
  			return 0;
	}
 });
 
 //추상메서드이므로 람다식 적용 가능 , 아래와 같이 변환이 가능
 Arrays.sort(names, (o1, o2) -> {
 	if (o1 == o2)
    	return 1;
    else
    	return 0;
});

// 다른 기존의 메소드를 참조할수도 있다
// 임의 개수의 인자들이 String의 compateToIgnoreCase라는 메서드를 사용하게 된다
Arrays.sort(names, String::compareToIgnoreCase);
profile
내꿈은 숲속의잠자는공주

0개의 댓글