목차
- 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 강의 | 백기선 - 인프런
백기선 | 자바 8에 추가된 기능들은 자바가 제공하는 API는 물론이고 스프링 같은 제 3의 라이브러리 및 프레임워크에서도 널리 사용되고 있습니다. 이 시대의 자바 개발자라면 반드시 알아야 합
www.inflearn.com
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
'Computer Sience > Java' 카테고리의 다른 글
[JAVA8] 자바 8 API의 기본 메소드와 스태틱 메소드 (6) | 2024.10.02 |
---|---|
[JAVA8] 인터페이스 기본 메소드와 스태틱 메소드 (0) | 2024.10.02 |
[JAVA8] 람다 표현식 + 변수 캡쳐 & 변수 쉐도잉 (0) | 2024.09.30 |
[JAVA8] 자바에서 제공하는 함수형 인터페이스 (0) | 2024.09.30 |
[JAVA8] 함수형 인터페이스와 람다 표현식 + 자바 함수형 프로그래밍 (2) | 2024.09.30 |