함수형 인터페이스로 인자를 받을 떄에
1. 해당 인자로 익명객체를 생성해서 전달하는건 아주 명료함.
2. 근데 람다를 전달해주는것은????
이걸 일종의 신택스 슈거로 생각하면 마음이 편하긴 한데, 람다가 신택스 슈거는 아니잖아.
람다한테 타입이 지정되는거임???? 함수형 인터페이스 타입을 받아오는 곳에 어떻게 람다가 들어가는거야???
뭐 람다는 어떻게 내부적으로 타입이 잘 맞도록 처리되어있다고 치자.
람다가 생성되면 익명객체가 되는데 해당 객체가 전달되는 상황에 맞춰서 해당 인터페이스도 구현해버리고
해당 람다 코드를 해당 인터페이스의 메소드로 가져간다고 하자.
캡처같은경우에는 익명객체의 내부 변수로 캡처한다고 생각하자.
오케이 오케이야..... 근데 3번은 더 씹창이다.
3. System.out::println 처럼 메소드를 건네주는 방법???
이거 뭐냐 씨발???? 이거도 람다임?????
그러면 앞서 2번에서 람다가 즉흥적으로 인터페이스로 변환된다는걸 가정하면 메소드도 동일하게 그짓을 한다는거임??
메소드의 타입은 뭐임???
얘도 동일하게 함수형 인터페이스로 변환되는 과정을 거친다는거지??
람다같은경우에는 캡처라는 특이사항이 있다면,
메소드같은 경우에는 객체의 내부 변수를 사용할 수 있다는 특이사항이 있는데
해당 객체의 필드같은거도 전부 익명객체의 상태필드로 들어간다는 개념인가???
2는 메소드 시그니처가 동일한 함수형인터페이스의 익명 객체 만들어줌, 3은 메서드 참조라는건데 람다랑은 좀 다름 자세하게 알고 싶으면 "모던 자바인 액션" 독서 ㄱㄱ
ㄳㄳ
3은 좀 복잡함? 간단하게만 설명 안될까?
3도 결국은 익명객체를 만들어줘?
대충 적응했어. ㅎㅎ 익명객체를 어케든 만들어준다고 생각하고 나니까 맘 편해짐
2번은 정확히 말하면 매번 익명 객체를 만들어주는건 아님 invokedynamic 검색해보셈
너무어렵네요 ㅠㅠㅠ
일단 건너뛰어도 될까요? 너무 어렵습니다 ㅠㅠㅠㅠ 자바 바이트코드 이야기가나오네요
네 넘기셔도 됩니다