peaches-book-study / effective-java

이펙티브 자바 3/E
0 stars 2 forks source link

Item 44. 표준 함수형 인터페이스를 사용하라 #47

Open youngkimi opened 3 months ago

youngkimi commented 3 months ago

Chapter : 7. 람다와 스트림

Item : 44. 표준 함수형 인터페이스를 사용하라

Assignee : youngkimi


🍑 서론

함수형 인터페이스를 새로 구현하기 보다는 표준 함수형 인터페이스를 활용하라.

🍑 본론

LinkedHashMap

// 상위 클래스의 removeEldestEntry를 재정의.
// Entry Size가 100을 넘으면, true를 반환할 것이다.
protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
    return size() > 100;
}

표준 함수형 인터페이스를 사용해라

@FunctionalInterface interface EldestEntryRemovalFunction<K, V> {
    boolean remove(Map<K, V> map, Map.Entry<K, V> eldest);
}

자주 사용하는 기본 인터페이스 6가지

Operator(Unary, Binary)

Predicate

Function

Supplier

Consumer

기본 인터페이스 변형

다 외우기에는 수도 많고 규칙성도 부족하다.

함수형 인터페이스를 직접 구현해야 하는 경우

아래 조건 중 하나 이상을 만족한다면 고민해보아야 한다.

  1. 자주 사용하며, 이름이 그 용도를 훌륭히 설명해주는 경우
  2. 구현하는 쪽에서 반드시 지켜야할 규약을 담고 있는 경우
  3. 유용한 디폴트 메서드를 가지고 있는 경우

Comparator<T>를 떠올려보자.

직접 만든 함수형 인터페이스에는 항상 @FunctionalInterface 를 사용하라

@Override를 사용하는 이유와 비슷하다.

  1. 해당 클래스의 코드를 읽는 사람에게 해당 인터페이스가 람다용으로 설계된 것임을 알려준다.
  2. 해당 인터페이스가 추상 메서드를 오직 하나 가지고 있어야 컴파일되게 해준다.
  3. 그 결과 누군가 메서드를 추가 못하게 막아준다.

함수형 인터페이스를 API에서 사용할 때의 주의점

🍑 결론

자바가 람다를 지원함을 생각하고 API를 설계하라.


Referenced by

-

pyeong114 commented 3 months ago
스크린샷 2024-04-16 오후 7 57 01