inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

더 자바, Java 8

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

해결된 질문

245

현상혁

작성한 질문수 14

0

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

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

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

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

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

java

답변 1

1

백기선

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

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

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

0

현상혁

답변 감사합니다! :)

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