-
[더 자바 8] 메소드 레퍼런스JAVA/JAVA8 관련 2022. 2. 13. 14:32
메소드 레퍼런스
: 람다가 하는 일이 기존 메소드 또는 생성자를 호출하는 거라면, 메소드 레퍼런스를 사용해서 매우 간결하게 표현할 수 있다.
메소드 참조하는 방법
스태틱 메소드 참조 타입::스태틱 메소드
ex:) UnaryOperator<String> hi = Greeting::hi;특정 객체의 인스턴스 메소드 참조 개체 레퍼런스::인스턴스 메소드
ex:) Greeting greeting = new Greeting();
UnaryOperator<String> hello2 = greeting::hello;임의 객체의 인스턴스 메소드 참조 타입::인스턴스 메소드 생성자 참조 타입::new
ex:) Supplier<Greeting> newGreeting = Greeting::new;public class App { public static void main(String[] args) { // 람다식 // parameter : String, return : String Function<String, String> hi = (s)->"hi "+s; System.out.println(hi.apply("jump")); // hi jump // paramter랑 return type이 같은경우 UnaryOperator<String> hello = (s) -> "hello "+s; System.out.println(hello.apply("jump")); // hello jump // 메소드 레퍼런스 // 정적 메소드 UnaryOperator<String> hi2 = Greeting::hi; System.out.println(hi2.apply(" jump!!")); // Greeting의 hi 정적 메소드를 hi2에 저장하고 apply를 통해 호출 // hi jump!! // 인스턴스 메소드 Greeting greeting = new Greeting(); UnaryOperator<String> hello2 = greeting::hello; System.out.println(hello2.apply(" jump!!")); // 인스턴스 메소드는 위와같이 객체가 생성되어야 호출가능하다. // hello jump!! // 객체 생성 Supplier<Greeting> newGreeting = Greeting::new; Greeting greeting1 =newGreeting.get(); UnaryOperator<String> newGreetingMethod = greeting1::hello; newGreetingMethod.apply("jump !!!!"); // Greeting 객체 생성 후 hello 메소드 호출 // hello jump !!!! // Array Sort (응용) String [] names= {"jump","developer","lee"}; Arrays.sort(names,String::compareToIgnoreCase); for(String name :names) { System.out.print (name+ " "); } System.out.println(); Integer [] num = {3,5,9,2,10,6}; Arrays.sort(num,(a,b)-> b-a); for(Integer i : num) System.out.print(i+" "); } }
결과 :
'JAVA > JAVA8 관련' 카테고리의 다른 글
[더 자바8] Opitonal 소개 (0) 2022.04.05 [더 자바8] STREAM API (0) 2022.03.20 [더 자바8] 인터페이스 기본 메소드와 스태틱 메소드 (0) 2022.02.13 [더 자바 8] 람다 표현식 (0) 2022.02.06 [더 자바 8] 함수형 인터페이스와 람다 표현식 (0) 2022.02.04