ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [더 자바 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+" ");
        }
    }

    결과 :

     

     

Designed by Tistory.