도당탕탕
Item64 : 인터페이스로 객체들을 참조하라. 본문
만약 적절한 인터페이스 타입이 존재할 때, 파라미터와 리턴 타입 그리고 필드들은 모두 인터페이스 타입으로 선언되어야 한다. 이유는 더 프로그램이 더 유연해지기 때문이다.
인터페이스 사용의 장점
1. 여러 구현체 사용가능
LinkedHashSet<Son> sonSet = new LinkedHashSet<>(); // 유연하지 않음.
Set<Son> sonSet = new HashSet<>(); // 유연함.
위에 코드 처럼 인터페이스 타입은 여러 구현을 사용할 수 있다.
2. 구현 클래스의 변동사항에 영향을 받지 않음.
구현 클래스 타입으로 사용시, 구현 클래스가 후에 업데이트되면, 클라이언트 코드는 더 이상 동작하지 않을 수 있다.
하지만 인터페이스는 변경될 가능성이 낮다.
적절한 인터페이스가 존재하지 않을 경우 어떻게 할까?
String
,BigInteger
와 같은 Value Class들은 보통 인터페이스로 구현이 되지 않는다.OutputStream
과 같이 클래스 기반 프레임워크들 또한 적절한 인터페이스가 존재하지 않는다. 보통 인터페이스 대신 추상 클래스가 사용된다.- 인터페이스를 구현하지만, 인터페이스에 없는 추가 메서드를 구현하는 경우가 있다. 예를 들면,
PriorityQueue
클래스는Queue
인터페이스가 없는comparator
함수를 가지고 있다.
위 세가지 경우에 클래스 계층구조에서 가장 덜 specific class를 구현하면 된다.
'JAVA' 카테고리의 다른 글
Item66 : Native method를 현명하게 사용하라. (0) | 2023.01.18 |
---|---|
Item65 : 리플렉션보다는 인터페이스를 사용하라 (0) | 2023.01.18 |
Item63 : 문자열 연결은 느리니 주의하라 (0) | 2023.01.17 |
Item62 : 다른 타입이 적절한곳에 String을 피하라. (0) | 2023.01.16 |
Item61 : 박싱된 기본 타입보다는 기본 타입을 사용하라 (0) | 2023.01.16 |
Comments