JAVA4_05_메소드 참조
메소드 참조 method reference
-
하나의 메소드만 호출하는 람다식은 메소드 참조로 더 간단히!! 할 수 있다.
-
✨✨클래스명::메소드명
하나의 메소드만 호출하는 람다식은 메소드 참조로 더 간단히!! 할 수 있다.
✨✨클래스명::메소드명
종류 | 람다 | 메소드 참조 |
---|---|---|
static메소드 참조 | (x) -> ClassName.method(x) | ClassName::method |
인스턴스메소드 참조 | (obj.x) -> obj.method(x) | ClassName::method |
특정 객체 인스턴스메소드 참조 | (x) -> obj.method(x) | obj::method |
- 마지막은 잘 안쓰이니 위 두개만!
static메소드
참조
Integer method(String s) { //그저 Integer.parseInt(String s)만 호출
return Integer.parseInt(s);
}
...
...
int result = obj.method("123");
int result = Integer.parseInt("123");
//위 둘은 같은 거
-> 람다식
Function<String, Integer> f = (String s) -> Integer.parseInt(s);
int result = f.apply("100"); //100
- 좌항에 입력(
String
)과 출력(Integer
)의 정보가 있기에, 우항의 타입이 필요없다!!
-> static메소드(parseInt()
) 참조
Function<String, Integer> f = Integer::parseInt; int result = f.apply("100"); //100
- 괄호() 빼자!!
- 연습하는 방법 : ✨메소드 참조 -> 람다식 으로 바꾸는 훈련을 하자!!
생성자와 메소드 참조
-
✨객체 생성할 때!!
-
✨✨✨객체이름::new
1. 매개변수(입력) X
- 입력 없이 출력만!!
- 💖출력에 객체
- ✨✨매개변수가 없는 생성자
-> 람다식
Supplier<MyClass> s = () -> new MyClass();
System.out.println(s.get()); //MyClass@주소....
-> 메소드 참조
Supplier<MyClass> s = MyClass::new;
System.out.println(s.get()); //MyClass@주소....
2. 매개변수(입력) O
- 입력O 출력O
- 💖출력에 객체
- ✨✨매개변수가 있는 생성자
-> 람다식
Function<Integer, MyClass> f = (i) -> new MyClass(i);
-> 메소드 참조
Function<Integer, MyClass> f = MyClass::new;
//만약 매개변수가 두개라면??
BiFunction<Integer, String, MyClass> f = MyClass::new;
✨✨배열과 메소드 참조
- ✨배열 생성할 때!!
- 💖출력에 배열
- 많이 사용한다!!!
-> ✨람다식
Function<Integer, int[]> f = (x) -> new int[x];
- x : 배열의 길이
-> ✨메소드 참조
Function<Integer, int[]> f = int[]::new;
- ✨✨
배열타입[]::new
✨객체 생성할 때!!
✨✨✨객체이름::new
Supplier<MyClass> s = () -> new MyClass();
System.out.println(s.get()); //MyClass@주소....
Supplier<MyClass> s = MyClass::new;
System.out.println(s.get()); //MyClass@주소....
Function<Integer, MyClass> f = (i) -> new MyClass(i);
Function<Integer, MyClass> f = MyClass::new;
//만약 매개변수가 두개라면??
BiFunction<Integer, String, MyClass> f = MyClass::new;
- ✨배열 생성할 때!!
- 💖출력에 배열
- 많이 사용한다!!!
-> ✨람다식
Function<Integer, int[]> f = (x) -> new int[x];
- x : 배열의 길이
-> ✨메소드 참조
Function<Integer, int[]> f = int[]::new;
- ✨✨
배열타입[]::new
ex14_05_0
import java.util.function.Function;
import java.util.function.Supplier;
public class Ex14_05_0 {
public static void main(String[] args) {
//매개변수 없는 생성자
Supplier<MyClass1> s = () -> new MyClass1();
Supplier<MyClass1> s1 = MyClass1::new;
System.out.println(s.get());
System.out.println(s.get().iv);
System.out.println(s1.get());
System.out.println(s1.get().iv);
//매개변수 있는 생성자
Function<Integer, MyClass1> f = (i) -> new MyClass1(i);
Function<Integer, MyClass1> f1 = MyClass1::new;
System.out.println(f.apply(100));
System.out.println(f.apply(100).iv);
System.out.println(f1.apply(200));
System.out.println(f1.apply(200).iv);
//배열 생성
//***배열을 생성할 땐 꼭 Function!! 배열의 길이Integer가 필요하기 때문에
Function<Integer, int[]> f2 = (x) -> new int[x];
Function<Integer, int[]> f3 = int[]::new;
System.out.println(f2.apply(55));
System.out.println(f2.apply(55).length);
System.out.println(f3.apply(66));
System.out.println(f3.apply(66).length);
}
}
class MyClass1{
int iv;
MyClass1(){ this.iv = 777; }
MyClass1(int i){ this.iv = i;}
}
MyClass1@7adf9f5f
777
MyClass1@85ede7b
777
MyClass1@6b884d57
100
MyClass1@38af3868
200
[I@33c7353a
55
[I@681a9515
66
Ref
Author And Source
이 문제에 관하여(JAVA4_05_메소드 참조), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@lecharl/JAVA405메소드와-생성자의-메소드-참조저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)