람다 표현식, 메서드 레퍼런스 관련 질문입니다.
강의 수강 중 의문이 생겨 질문 드립니다.
람다 표현식을 통해 함수 객체가 생성된다고 배웠습니다. 그리고 메서드 레퍼런스는 람다 표현식을 간결하게 쓸 수 있는 것이므로 당연히 메서드 레퍼런스를 써도 어떠한 함수 객체? 가 생기게 된다고 이해했습니다.
여기서 의문이 생기는데 List의 sort() 메서드는 인자로 Comparator를 받고 이는 함수형 인터페이스이므로 메서드 레퍼런스를 통해 Comparator를 생성하여 인자 자리에 넣을 수 있는데 이때 메서드 레퍼런스를 통해 생성되는 '함수 객체'는 Comparator 클래스의 인스턴스 객체인가요? 아니면 다른 종류의 객체인가요?
해당 객체를 통해 reversed 등 Comparator 클래스의 함수를 호출할 수 있는 것으로 보아 Comparator 클래스의 인스턴스인가 생각했는데 제가 이해하기로는 람다 표현식으로 생성되는 객체는 클래스의 인스턴스가 아닐 것 같아서 질문드립니다.
아직 람다 표현식에 대한 이해가 부족해 질문이 조금 두서 없는 점 죄송합니다.
답변 1
1
좋은 질문입니다. 결론부터 말씀드리자면 해당 인스턴스의 타입은 무조건 Comparator 타입입니다.
우선 Comparator는 클래스가 아니라 인터페이스죠. 그리고 Comparator의 규약은 결국 (자바가 기본으로 제공하는) BiFunction(인자 두개를 받아서 하나를 리턴하는 함수) 과 동일합니다. 그래서 별다른 함수 인터페이스를 정의하지 않고도 (a, b) -> 1 이런 람다 표현식을 작성하는게 가능한거죠.
Comparator 타입의 인스턴스를 람다 표현식을 사용해서 구현했다. 라고 생각시는게 좋겠습니다.
CompletableFuture의 get 실행에 대해 궁금한 점이 있습니다
0
238
2
기본 인터페이스의 기본 제공 메서드 관련 질문 (왜 이걸 사용하는지)
0
525
2
static 과 metaspace 관련 질문있습니다.
0
718
0
Map의 가장 큰 특징이 key는 null이 아니다
0
2390
2
Optional 질문드립니다.
0
478
0
인텔리제이 콘솔창
0
586
0
Supplier를 쓰는 이유
0
1367
1
allOf()에서 컬렉션으로 반환하는 것을 설명할 때 코드
0
714
1
[참고] LTS주기
0
478
1
orElseThrow()
1
1098
2
findFirst함수
0
363
1
메서드 레퍼런스
1
481
1
primitive type 질문
0
311
1
FunctionalInterface 상속 관계 질문
0
295
1
함수형 인터페이스를 왜 사용하나요?
1
502
1
while문 세미콜론
0
438
1
flatMap Optional과 Stream에서의 차이점을 제가 잘 이해했는지 헷갈립니다!
0
416
1
람다식과 익명 클래스
0
328
1
steam api 예제 git 주소
3
788
1
thread.sleep질문
0
395
2
.orElse 매개변수 질문
0
265
1
isPresent( ) 와 null 질문
0
339
1
예제 코드 질문
2
292
1
코드 질문있습니다.
0
238
1





