인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

현상혁님의 프로필 이미지
현상혁

작성한 질문수

더 자바, Java 8

람다 표현식, 메서드 레퍼런스 관련 질문입니다.

해결된 질문

작성

·

218

0

강의 수강 중 의문이 생겨 질문 드립니다.

람다 표현식을 통해 함수 객체가 생성된다고 배웠습니다. 그리고 메서드 레퍼런스는 람다 표현식을 간결하게 쓸 수 있는 것이므로 당연히 메서드 레퍼런스를 써도 어떠한 함수 객체? 가 생기게 된다고 이해했습니다.

여기서 의문이 생기는데 List의 sort() 메서드는 인자로 Comparator를 받고 이는 함수형 인터페이스이므로 메서드 레퍼런스를 통해 Comparator를 생성하여 인자 자리에 넣을 수 있는데 이때 메서드 레퍼런스를 통해 생성되는 '함수 객체'는 Comparator 클래스의 인스턴스 객체인가요? 아니면 다른 종류의 객체인가요?

해당 객체를 통해 reversed 등 Comparator 클래스의 함수를 호출할 수 있는 것으로 보아 Comparator 클래스의 인스턴스인가 생각했는데  제가 이해하기로는 람다 표현식으로 생성되는 객체는 클래스의 인스턴스가 아닐 것 같아서 질문드립니다.

아직 람다 표현식에 대한 이해가 부족해 질문이 조금 두서 없는 점 죄송합니다.

답변 1

1

백기선님의 프로필 이미지
백기선
지식공유자

좋은 질문입니다. 결론부터 말씀드리자면 해당 인스턴스의 타입은 무조건 Comparator 타입입니다.

우선 Comparator는 클래스가 아니라 인터페이스죠. 그리고  Comparator의 규약은 결국 (자바가 기본으로 제공하는) BiFunction(인자 두개를 받아서 하나를 리턴하는 함수) 과 동일합니다. 그래서 별다른 함수 인터페이스를 정의하지 않고도 (a, b) -> 1 이런 람다 표현식을 작성하는게 가능한거죠.

Comparator 타입의 인스턴스를 람다 표현식을 사용해서 구현했다. 라고 생각시는게 좋겠습니다.

현상혁님의 프로필 이미지
현상혁
질문자

답변 감사합니다! :)

현상혁님의 프로필 이미지
현상혁

작성한 질문수

질문하기