반응형
이번 시간은 메소드 레퍼런스를 사용하는 4가지 종류를 알아보자.
1. 스태틱 메소드 참조
2. 특정 객체의 인스턴스 메소드 참조
3. 임의 객체의 인스턴스 메소드 참조
4. 생성자 참조
0. 메소드 레퍼런스를 사용할 대상이 되는 클래스는 아래와 같이 작성해보자
public class Greeting {
private String name;
public Greeting() {
}
public Greeting(String name) {
this.name = name;
}
public String hello(String name) {
return "hello " + name;
}
public static String hi(String name) {
return "hi " + name;
}
public String getName() {
return name;
}
}
1. 스태틱 메서드 참조
- 사용 방법은 "타입 :: 스태틱 메소드" 로 사용하면 된다.
- 입력과 반환 값이 같기 때문에 UnaryOperator를 사용한 예시를 작성해 봤다.
// 1. 스태틱 메소드 참조 (타입::스태틱 메소드)
UnaryOperator<String> hi = Greeting::hi;
System.out.println(hi.apply("static method"));
2. 특정 객체의 인스턴스 메소드 참조
- 사용 방법은 "객체 레퍼런스::인스턴스 메소드"
- hello메소드가 입출력 값이 같기 때문에 UnaryOperator 사용
// 2. 특정 객체의 인스턴스 메소드 참조 (객체 레퍼런스::인스턴스 메소드)
Greeting greeting = new Greeting();
UnaryOperator<String> hello = greeting::hello;
System.out.println(hello.apply("instance method"));
3. 임의 객체의 인스턴스 메소드 참조
- 사용 방법은 "타입::인스턴스 메소드"
- Arrays.sort 함수에서 compareToIgnoreCase를 사용해서 구현해봤습니다.
// 3. 임의 객체의 인스턴스 메소드 참조 (타입::인스턴스 메소드)
String[] names = {"sanghun", "shoney", "toby","apple"};
Arrays.sort(names, String::compareToIgnoreCase);
System.out.println(Arrays.toString(names));
4. 생성자 참조
- 사용 방법은 "타입::new"
- Supplier는 인자없이 Greeting 리턴값만 있기 때문에 기본생성자로 생성한다.
- Function에서 인자값 String, 반환값 Greeting이기 때문에 생성자를 생성(?)한다.
// 4-1. 기본생성자
Supplier<Greeting> newGreeting = Greeting::new; // Supplier 가 인자 없고 리턴만 있는 것 이기 때문에 기본생성자 연결됨
System.out.println(newGreeting.get().getName());
// 4-2. 생성자
Function<String, Greeting> newGreeting2 = Greeting::new; // Function 인자가 String이고 리턴이 Greeting이라서 적절한 생성자 연결
System.out.println(newGreeting2.apply("생성자").getName());
반응형
'프로그래밍언어 > JAVA' 카테고리의 다른 글
[Java] 가변객체, 불변객체 (1) | 2023.03.30 |
---|---|
[Java] String, StringBuilder, StringBuffer 차이점 (0) | 2023.03.30 |
[JAVA] StringBuilder 메서드 별 간단한 사용 예제 (0) | 2023.03.29 |
[JAVA] 다형성 간단한 예제 및 설명 (0) | 2023.03.03 |
[JAVA] Functional Interface 함수형 인터페이스 (1) | 2023.01.02 |