반응형
Java 8 시리즈는 인프런 강의를 듣고 정리한 내용이다.
참고 : https://www.inflearn.com/course/the-java-java8/dashboard
더 자바, Java 8 - 인프런 | 강의
자바 8에 추가된 기능들은 자바가 제공하는 API는 물론이고 스프링 같은 제 3의 라이브러리 및 프레임워크에서도 널리 사용되고 있습니다. 이 시대의 자바 개발자라면 반드시 알아야 합니다. 이
www.inflearn.com
메소드 레퍼런스
람다표현식에서 바디에 해당하는 부분을 직접 구현하는 것이 아니라, 기존에 같은 동작을 수행하는 메소드가 있다면 그 메소드를 참조하여 간단하게 표현하는 것을 메소드 레퍼런스라고 한다.
메소드 참조 방법
- 스태틱 메소드 참조 → 타입::스태틱 메소드
- 특정 객체의 인스턴스 메소드 참조 → 객체 레퍼런스::인스턴스 메소드
- 임의 객체의 인스턴스 메소드 참조 → 타입::인스턴스 메소드
- 생성자 참조 → 타입::new
아래 메소드가 정의된 클래스 예시를 통해 참조 방법을 하나 씩 다뤄보자.
public class Gretting {
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 class App {
public static void main(String[] args) {
UnaryOperator<String> hi = (s) -> "hi " + s; //기존 람다
UnaryOperator<String> hi = Greeting::hi; //static 메소드 참조
}
}
특정 객체의 인스턴스 메소드 참조
public class App {
public static void main(String[] args) {
UnaryOperator<String> hi = (s) -> "hi " + s; //기존 람다
Greeting greeting = new Greeting();
UnaryOperator<String> hi = greeting::hello;
}
}
임의의 객체 인스턴스 메소드 참조
public class App {
public static void main(String[] args) {
String[] names = {"corin", "hello", "prodo"};
Arrays.sort(names, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return 0;
}
});
Arrays.sort(names, (o1, 02) -> 0); //람다 표현식
Arrays.srot(names, String::compareToIgnoreCase); //메소드 레퍼런스
}
}
생성자 참조
public class App {
public static void main(String[] args) {
Supplier<Greeting> newGreeting = Greeting::new; //매개변수가 없는 생성자
Function<String, Greeting> greeting = Greeting::new; // 위와 다른 생성자를 참조한다.
Greeting hi = greeting.apply("corin");
System.out.println(hi.getName()); //corin 출력
}
}
반응형
'언어' 카테고리의 다른 글
[Java] 메모리 누수 원인 알아보기 (0) | 2023.01.01 |
---|---|
[Java] static (0) | 2022.12.17 |
[Java] Java8 - 함수형 프로그래밍 (4) (0) | 2022.12.01 |
컴파일 언어 vs 인터프리터 언어 (0) | 2022.11.29 |
[Java] 다형성 Ploymorphism (0) | 2022.11.08 |