250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 인프런백기선
- 이펙티브자바
- 네트워크
- 알고리즘
- aop
- CleanCode
- 자료구조
- DDD
- 인덱스
- 기술면접
- react
- jpa
- 이팩티브 자바
- AWS
- 자바스터디
- 클린코드
- 자바
- 도메인 주도 개발 시작하기
- 알고리즘분석
- SQL쿡북
- java
- 스프링부트와AWS로혼자구현하는웹서비스
- 자바예외
- mysql
- AWS RDS
- 인프런김영한
- vue.js
- 혼공SQL
- 이펙티브 자바
- MariaDB
Archives
- Today
- Total
기록이 힘이다.
[이펙티브 자바]아이템44 표준 함수형 인터페이스를 사용하라 본문
728x90
필요한 용도에 맞는게 있다면, 직접 구현하지 말고 표준 함수형 인터페이스를 활용하라.
그러면 API가 다루는 개념의 수가 줄어들어 익히기 더 쉬워진다. 또한 표준 함수형 인터페이스들은 유용한 디폴트 메서드를 많이 제공하므로 다른 코드와의 상호운용성도 크게 좋아질 것이다.
java.util.function 패키지에는 총 43개의 인터페이스가 담겨 있다. 이 중 개본 인터페이스 6개만 기억하면 나머지는 충분히 유추해낼 수 있다.
기본 인터페이스는 기본 타입인 int, long, double용으로 각 3개씩 변형이 생겨난다.
인터페이스 함수 시그니처 예
UnaryOperator<T> | T apply(T t) | String::toLowerCase |
BinaryOperator<T> | T apply(T t1, T t2) | BigInteger::add |
Predicate<T> | boolean test(T t) | Collection::isEmpty |
Function<T, R> | R apply(T t) | Arrays::asList |
Supplier<T> | T get() | Instant::now |
Consumer<T> | void accept(T t) | System.out::println |
표준 함수형 인터페이스 대부분은 기본 타입만 지원한다. 그렇다고 기본 함수형 인터페이스에 박싱된 기본 타입을 넣어 사용하지는 말자.
Comparator 특성을 정리하면 다음의 세 가지 인데, 이 중 하나 이상을 만족한다면 전용 함수형 인터페이스를 구현해야 하는 건 아닌지 진중히 고민해야 한다.
-자주 쓰이며, 이름 자체가 용도를 명확히 설명해준다.
-반드시 따라야 하는 규약이 있다.
-유용한 디폴트 메서드를 제공할 수 있다.
@FunctionalInterface interface EldestEntryRemovalFunction<K,V>{
boolean remove(Map<K,V> map, Map.Entry<K,V> eldest);
}
@FunctionalInterface 애너테이션이 달려 있음에 주목하자. 프로그래머의 의도를 명시, 세 가지 목적이 있다.
- 해당 클래스의 코드나 설명 문서를 읽을 이에게 그 인터페이스가 람다용으로 설계뙨 것임을 알려준다.
- 해당 인터페이스가 추상 메서드를 오직 하나만 가지고 있어야 컴파일되게 해준다.
- 그 결과 유지보수 과정에서 누군가 실수로 메서드를 추가하지 못하게 막아준다.
직접 만든 함수형 인터페이스에는 항상 @FunctionalInterface 애너테이션을 사용하라.
서로 다른 함수형 인터페이스를 같은 위치의 인수로 사용하는 다중정의를 피해야 한다. 이는 “ 다중정의는 주의해서 사용하라”는 아이템 52의 특수한 예라고 할 수 있다.
'JAVA' 카테고리의 다른 글
[이펙티브 자바]아이템55. 옵셔널 반환은 신중히 하라 (0) | 2023.04.10 |
---|---|
[이펙티브 자바] 아이템45 스트림은 주의해서 사용하라 (0) | 2023.04.07 |
[이펙티브 자바] 6장 열거타입과 애너테이션 (0) | 2023.03.29 |
과제) 자바의 Record를 공부하세요. (0) | 2023.03.26 |
[이펙티브 자바] 16. public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 (0) | 2023.03.23 |