이펙티브 자바, 쉽게 정리하기 - item 64. 객체는 인터페이스를 사용해 참조하라
웬만하면 유연함을 위해 인터페이스로 연결하자
- 매개변수, 반환값, 변수, 필드가 대상이 될 수 있다.
- 인터페이스를 타입으로 사용하면 프로그램이 유연해진다.
Map
인터페이스를 사용한다고 가정했을 때,HashMap
도 가능하고, 성능을 위해EnumMap
혹은 순서를 위해LinkedHashMap
등을 유연하게 사용할 수 있다.- 왜냐하면 구현체들은 다
Map
인터페이스를 구현한 것이기 때문이다.
- 왜냐하면 구현체들은 다
Set<Son> sonSet = new LinkedHashSet<>(); // O
LinkedHashSet<Son> sonSet = new LinkedHashSet<>(); // X
그러나 인터페이스가 항상 정답은 아니다.
클래스를 써야 하는 경우
- 적합한 인터페이스가 없는 경우
String
,BigInteger
- 때때로 어느정도 수고를 해 인터페이스를 만들 수는 있겠지만, 정말 필요한지 고민해보자.
- 해당 클래스에서만 제공하는 특수한 메서드를 사용하는 경우
PriorityQueue
의compare
는 일반Queue
에선 제공하지 않는다.
다만 클래스를 남발하진 말고, 되도록 인터페이스를 쓰자
적합한 인터페이스가 없다면 클래스의 계층구조 중 필요한 기능을 만족하는 가장 덜 구체적인 상위 클래스를 타입으로 사용할 수도 있다.
반응형
'Java > 이펙티브 자바' 카테고리의 다른 글
이펙티브 자바, 쉽게 정리하기 - item 66. 네이티브 메서드는 신중히 사용하라 (0) | 2023.06.27 |
---|---|
이펙티브 자바, 쉽게 정리하기 - item 65. 리플렉션보다는 인터페이스를 사용하라 (0) | 2023.06.26 |
이펙티브 자바, 쉽게 정리하기 - item 63. 문자열 연결은 느리니 주의하라 (0) | 2023.06.26 |
이펙티브 자바, 쉽게 정리하기 - item 62. 다른 타입이 적절하다면 문자열 사용을 피하라 (0) | 2023.06.23 |
이펙티브 자바, 쉽게 정리하기 - item 61. 박싱된 기본 타입보다는 기본 타입을 사용하라 (0) | 2023.06.22 |