람다를 쓸 때는 인터페이스가 아닌 메소드를 봐야한다

강동훈·2022년 7월 5일
0

인텔리제이를 사용하면 메소드 호출시 각 인자에 어떤 값을 넣어야 할지 힌트를 보여준다.

sort()List의 디폴트 메소드로, Comparator를 인자로 받아 정렬한다. Comparatorcompare()라는 유일한 abstract 메소드를 갖는 functional interface이다.

Functional interface는 람다 문법을 통해 간단히 구현할 수 있다. Comparator를 람다로 구현하려고 하는데, 순간적으로 인텔리제이의 힌트를 보고 헷갈렸다. Comparator<? super String> c라니 어떻게 람다를 구현해야하지?

람다를 사용할 때 중요한 것은 구현하려는 functional interface가 아니라 해당 인터페이스의 메소드이다. 메소드 매개변수가 몇 개인지, 타입은 무엇인지, 무엇을 리턴하는지를 보고 람다를 작성해야 한다.

list.sort((person1, person2) -> person1.name.compareTo(person2.name));

Function, Consumer, Supplier처럼 이름을 통해 구현해야 하는 메소드의 매개변수와 리턴에 대한 정보까지 알 수 있는 인터페이스가 아니라면 람다를 메소드 인자로 넘길 때 보이는 인텔리제이의 힌트가 오히려 헷갈릴 수도 있겠다.

profile
안녕하세요, 강동훈입니다.

0개의 댓글