JAVA4_05_메소드 참조

charl hi·2021년 10월 7일
0

JAVA4

목록 보기
5/13

자바의정석

출처

메소드 참조 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


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

0개의 댓글