Study_The JAVA 8_4

dragon9265·2022년 1월 26일
0

스터디

목록 보기
14/23

자바 기초 스터디_22.01.26(수)


메소드 레퍼런스

  • 람다 표현식을 매우 간결하게 표현할 수 있는 방법이다.
  • 하기 예시를 활용하여 메소드 참조하는 방법들을 살펴본다.

public class Greeting {

    private String name;
    
    public Greeting() { // 비어있는 생성자
    }
    
    public Greeting(String name) { // name을 받는 생성자
    	this.name = name;
    }
    
    public String hello(String name) { // 인스턴스 메소드
    	return "hello " + name;
    }
    
    public static String hi(String name) { // static 메소드
    	return "hi " + name;
    }

}

비어있는 생성자 참조

🔻 메소드 레퍼런스 활용 (타입 :: new)


public class App {
	public static void main(String[] args) {
    		Supplier<Greeting> newGreeting = Greeting::new; 
    	}
}	

입력값을 받는 생성자 참조

🔻 메소드 레퍼런스 활용 (타입 :: new)


public class App {
	public static void main(String[] args) {
    		Function<String, Greeting> vansGreeting 
           		 = Greeting::new;
    	}
}	

instance Method 참조


public class App {
	public static void main(String[] args) {
    		UnaryOperator<String> hi = Greeting::hi;
    	}
}	

🔻 메소드 레퍼런스 활용 (객체 레퍼런스 :: 인스턴스 메소드)


public class App {
	public static void main(String[] args) {
    		Greeting greeting = new Greeting();
    		UnaryOperator<String> hello = greeting::hello;
    	}
}	

static Method 참조


public class App {
	public static void main(String[] args) {
    		UnaryOperator<String> hi = (s) -> "hi " + s;
    	}
}	

🔻 메소드 레퍼런스 활용 (타입 :: 스태틱 메소드)


public class App {
	public static void main(String[] args) {
    		UnaryOperator<String> hi = Greeting::hi;
    	}
}	

임의 객체의 instance 메소드 참조


public class App {
	public static void main(String[] args) {
    		String[] names = {"D", "B", "A"}; 
            	Arrays.sort(names, new Comparator<String>() {
                	@Override
                    	public int compare(String o1, String o2) { // 파라미터 2개를 받아, 문자열을 비교하여 int로 리턴
                        	return 0;
                        }
                }
           		
    	}
}	

Comparator 가 Java 8 부터 Functionalinterface로 바뀌어서, 이 안에 여러개의 defult 나 static 한 메소드들이 있다.
그리고 함수형 인터페이스이기 때문에 람다식으로 바꿀 수 있다. 🔻


public class App {
	public static void main(String[] args) {
    		String[] names = {"D", "B", "A"}; 
            	Arrays.sort(names, (o1,o2) -> 0);
                        
  	}
}	

람다식을 넣을수 있단 얘기는, o1 문자열과 o2 문자열을 비교하여 int값으로 넘겨주는 메소드를
참조할 수 있다는 뜻이다.🔻


public class App {
	public static void main(String[] args) {
    		String[] names = {"D", "B", "A"}; 
            	Arrays.sort(names, String::compareToIgnoreCase);
                        
  	}
}	

임의의 인스턴스들("D", "B", "A")을 거쳐가며 compareToIgnoreCase 라는 인스턴스 메소드를 사용하게 되는것이다. ❗️ String에 static한 메소드가 있는것이 아니다.

profile
코딩도 점진적 과부화

0개의 댓글