• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

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

22.02.02 23:17 작성 조회수 144

0

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

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

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

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

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

답변 1

답변을 작성해보세요.

1

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

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

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

현상혁님의 프로필

현상혁

질문자

2022.02.15

답변 감사합니다! :)