https://youtu.be/I55ALQndw50?list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp
📖본 포스팅은 '자바의 정석 - 남궁성 저자' 님의 책과 유튜브 강의를 보고 작성되었습니다.
[메서드 참조]
- 하나의 메서드만 호출하는 람다식은 메서드 참조로 더 간단히 할 수 있다.
[static 메소드 참조]
Integer method(String s) {
return Integer.paraseInt(s);
}
↓
Function<String, Integer> f = (String s) -> Integer.parseInt(s);
- 그저 Integer.parseInt(String s)만 호출하는 걸 볼수 있다.
- 이는 그냥 람다식을 사용해서 간단히 할 수 있다.
package javajungsuk;
import java.util.function.Function;
public class Java14_0 {
public static void main(String[] args) {
// Function<String, Integer> f = (String s) -> Integer.parseInt(s);
// Function<String, Integer> f = 클래스이름::메서드이름;
Function<String, Integer> f = Integer::parseInt;
System.out.println(f.apply("100"));
}
}
[생성자의 메서드 참조]
[입력이 없이 주기만 하는 경우 supplier( ) / 매개변수가 없는 경우]
Supplier<MyClass> s = () -> new MyClass();
↓
Supplier<MyClass> s = () -> MyClass::new;
[생성자에 매개변수 있는 경우]
Function<Integer, MyClass> s = (i) -> new MyClass(i);
↓
Function<Integer, MyClass> s = MyClass::new;
[배열과 메서드 참조]
Function<Integer, int[]> f = x -> new int[x]; //람다식
Function<Integer, int[]> f2 = int[]::new; //메서드 참조
- 배열타입 :: new; 이렇게 쓰는 걸 많이 쓴다고 한다.
[실습]
[매개변수가 없는 경우(공급자의 경우)]
package javajungsuk;
import java.util.function.Supplier;
public class Java14_5 {
public static void main(String[] args) {
// Supplier<MyClass> s = () -> new MyClass();
Supplier<MyClass> s = MyClass::new;
MyClass mc = s.get();
System.out.println(mc);
System.out.println(s.get());
}
}
class MyClass{}
javajungsuk.MyClass@46f5f779
javajungsuk.MyClass@1c2c22f3
- 서로 다른 객체가 생성된 것을 볼수 있다.
[매개변수가 있는 경우]
package javajungsuk;
import java.util.function.Function;
import java.util.function.Supplier;
public class Java14_5 {
public static void main(String[] args) {
Function<Integer,MyClass> f = (i) -> new MyClass(i);
// Function<Integer, MyClass> f = MyClass::new;
MyClass mc = f.apply(100);
System.out.println(mc.iv);
}
}
class MyClass{
int iv;
MyClass(int iv){
this.iv = iv;
}
}
100
100
[배열의 경우]
package javajungsuk;
import java.util.function.Function;
import java.util.function.Supplier;
public class Java14_5 {
public static void main(String[] args) {
Function<Integer, int[]> f2 = (i) -> new int[i]; //람다식
Function<Integer, int[]> f3 = int[]::new; //메서드 참조
int[] arr = f2.apply(100);
System.out.println("arr.length = " + arr.length);
}
}
class MyClass{
int iv;
MyClass(int iv){
this.iv = iv;
}
}
arr.length = 100
'Java > 객체지향' 카테고리의 다른 글
[객체지향][스트림/Stream] - 스트림 만들기 (0) | 2022.03.15 |
---|---|
[객체지향][스트림/Stream] - 스트림, 스트림의 특징 (0) | 2022.03.15 |
[객체지향][람다식/Lambda Expression] - Predicate의 결합. CF와 함수형 인터페이스 (0) | 2022.03.09 |
[객체지향][람다식/Lambda Expression] - java.util.function패키지 (0) | 2022.03.09 |
[객체지향][람다식/Lambda Expression] - 함수형 인터페이스 (0) | 2022.03.09 |