본문 바로가기
Computer Sience/Java

[JAVA8] 메소드 래퍼런스

by 제우제우 2024. 9. 30.

목차 

  • UnaryOperator<T> 인터페이스 
  • Greeting 클래스 
  • 메소드 래퍼런스 
  • 참고 자료 

UnaryOperator<T> 인터페이스 

@FunctionalInterface
public interface UnaryOperator<T> extends Function<T, T> {
    static <T> UnaryOperator<T> identity() {
        return t -> t;
    }
}

 

Function 인터페이스를 상속받은 함수형 인터페이스이다. 

Function 인터페이스는 매개 변수 타입 T, 반환 타입 R을 지정해야 하지만

UnaryOperator 인터페이스는 하나의 타입만 지정하면 된다. 

즉 반환 타입 = 매개 변수 타입 같은 경우에 사용하면 된다. 

 

활용 

public class Main {
    public static void main(String[] args) {
        UnaryOperator<String> hi = s -> s + " hi";
        System.out.println(hi.apply("zeus"));
    }
}

// 출력 zeus hi

Greeting 클래스 

메소드 래퍼런스를 설명하기 위해 만든 클래스 

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;
    }
}

메소드 래퍼런스 

Greeting 클래스의 static 메소드 hi는 UnaryOperator 함수형 인터페이스에서 정의할 동작과 동일하다.

// Greeting 클래스 static Method
public static String hi(String name){
    return "hi " + name;
}

// 함수형 인터페이스 람다 표현식 
UnaryOperator<String> hi = s -> "hi " + name;

 

static 메소드 래퍼런스 활용

public class Main {
    public static void main(String[] args) {
        // static 메소드 래퍼런스 활용 
        UnaryOperator<String> hi = Greeting::hi;
        
        hi.apply("kkk"); // kkk hi 출력 
    }
}

 

인스턴스 메소드 래퍼런스 활용

public class Main {
    public static void main(String[] args) {
        // 인스턴스 메소드 래퍼런스 활용 
        Greeting greeting = new Greeting();
        UnaryOperator<String> hi = greeting::hello;
    }
}

 

생성자 활용 

// 생성자() 활용
Supplier<Greeting> greetingSupplier = Greeting::new;

// 생성자(String name) 활용 
Function<String, Greeting> greetingFunction = Greeting::new;

 

comparator 함수형 인터페이스 

int compare(T o1, T o2);
// comparator
ArrayList<String> list = new ArrayList<>(List.of("라", "가", "다", "나"));
Collections.sort(list, String::compareTo);
System.out.println(list); // [가, 나, 다, 라]

 


참고 자료 

인프런 백기선님 더 자바, Java 8

 

더 자바, Java 8 강의 | 백기선 - 인프런

백기선 | 자바 8에 추가된 기능들은 자바가 제공하는 API는 물론이고 스프링 같은 제 3의 라이브러리 및 프레임워크에서도 널리 사용되고 있습니다. 이 시대의 자바 개발자라면 반드시 알아야 합

www.inflearn.com

 

Java8 공식 문서 메소드 래퍼런스

 

Method References (The Java™ Tutorials > Learning the Java Language > Classes and Objects)

The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See Java Language Changes for a summary of updated

docs.oracle.com