🔥 Vamos/Java

1115 | 자바의 정석 기초편 :: ch14-9~14-14

unikue 2022. 11. 15. 21:43

Predicate의 결합

: Predicate는 조건식. 함수가 있을때 집어넣으면 boolean 반환하는 함수형 인터페이스.

: 인터페이스가 가질수 있는 static 메서드, 추상 메서드, default 메서드를 가질 수 있다.

: and(), or(), negate()로 두 predicate를 하나로 결합:

 

: 등가비교를 위한Predicate의 작성에는 isEqual()을 사용. (static 메서드)

: str.equals(str2)와 동일한 원리

외우지말고 필요할때 참고해서 작성

 

 

 

컬렉션 프레임웍과 함수형 인터페이스

: 함수형 인터페이스를 사용하는 컬렉션 프레임웍의 메서드 (와일드카드 생략 버전)

: 람다식을 통해 더 편리하게 사용할 수 있게 됨.

 

 


메서드 참조 (mathod reference)

: 하나의 메서드만 호출하는 람다식은 더 간단히 할 수 있다!

👉 클래스이름 :: 메서드 이름만 남는다

특정개체 인스턴스 참조는 잘 안써서 제외함

 

 

✔ static 메서드 참조

* 람다식 함수형인터페이스에서 string 입력 준다는걸 알고 있으므로 뒤의 (String s)가 생략되어도 됨.

** 메서드참조가 이해 안갈 땐 역으로 람다식에서 원래 메서드로 바꾸는걸 연습해봐야 함.

 

👉 = Integer :: parseInt; // 에서 (String s)-> Integer.parseInt(s); 로 바꾸는 방법

1. 그림을 그리고 입력이 뭔지 볼 것

2. in (String)/out(Integer) 값을 넣고 메서드를 넣는데 메서드 ParseInt()에서 받는건 String의 s. // Integer.ParseInt(s)

3. 메서드가 매개변수 몇개를 갖는지는 api나 이클립스 참고

 

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")+200;

 

 

 

✔ 생성자의 메서드 참조

Supplier <MyClass> s = ()-> new MyClass(); // 서플라이어는 입력이 없고 결과값만 있는데 얘는 객체를 생성해서 주기만 함.
Supplier <MyClass> s = MyClass:: new; // new MyClass(); 와 동일

Function<Integer, MyClass> s = (i) -> new MyClass(i); // 객체생성에 매개변수가 있는 케이스
Function<Integer, MyClass> s = MyClass::new;
BiFunction<Integer,Double,MyClass> s = MyClass::new; // 매개변수가 2두개일때

 

 

 

✔ 배열과 메서드참조 - 많이 사용함

Function<Integer, int[]> f = x -> new int[x]; // 람다식. 
// 배열은 배열길이(integer값)이 필요하기때문에 Function을 써야함

Function<Integer, int[]> f = int[]::new; // 메서드참조 (배열타입이므로 int[]가 클래스이름 자리에 들어감)

* 배열 생성은 꼭 Function을 써야 함