아이템 21 - 인터페이스는 구현하는 쪽을 생각해 설계하라.
-> 기존에는 기존 구현체를 깨뜨리지 않고 인터페이스에 새로운 메서드를 추가할 방법이 없었다. (이미 해당 인터페이스가 클라이언트 쪽에서 구현되어 있을 때 해당 인터페이스를 구현하고 있는 클래스에서 모두 다시 구현을 해주어야 했다. )
-> 하지만 자바 8버전에서는 인터페이스에 '디폴트 메서드' 라는 것을 구현할 수 있게 되었다.
-> 디폴트 메서드는 인터페이스에 선언해도 해당 인터페이스를 구현한 클래스에서 필수적으로 구현해야 하는 내용은 아니다. 그렇기에 새로운 메서드를 추가할 때 상당한 유연성을 제공한다.
-> 하지만, 이미 배포된 라이브러리 인터페이스에 디폴트 메서드를 추가할 때에는 기존 구현체에 따라 런타임 오류를 발생시킬 수 있다. 그렇기 때문에 추후에 추가하는 내용은 설계시에 고민할 거리가 많고, 디폴트 메서드라도 주의해서 추가해야 한다. (책에서는 최소 다른 구현으로 3가지 이상 구현해보고 테스트 해보라고 나와있다.)
-> 결과적으로 구현하는 쪽을 고려하면 아무리 인터페이스에 유연성을 제공하는 디폴트 메서드라도 실제 추가시에는 주의해야 한다는 것이다.
아이템 22 - 인터페이스는 타입을 정의하는 용도로만 사용하라
-> 인터페이스를 구현한다는 것은 자신의 인스턴스로 무엇을 할 수 있는지를 클라이언트에 얘기해 주는 것.
-> 이 용도 이외의 용도로 사용하지 말라
-> 특히, 상수 인터페이스는 안티패턴이다.
아이템 23 - 태그 달린 클래스보다는 클래스 계층구조를 활용하라
-> 태그달린 클래스 (책 142p 참조)
-> 태그 달린 클래스를 쓸 바에는 계층구조 클래스를 활용해서 (추상클래스) 상위클래스를 잡고, 해당 상위 클래스를 상속받아 하위 클래스들을 각각 구현하게끔 처리하는 게 좋다.
-> 일단 태그 달린 클래스가 책에 나온대로라면, 거의 이렇게 짤 일이 없을 것 같아서 참고하는 정도면 될 것 같다.
아이템 24 - 멤버 클래스는 되도록 static으로 만들라
-> 중첩 클래스 4가지
- 정적 멤버 클래스
- (비정적) 멤버 클래스
- 익명 클래스
- 지역 클래스
-> 참고 : sjh836.tistory.com/145
중첩클래스를 알아보자 (내부클래스, 정적 중첩클래스, 지역클래스, 익명클래스)
일반클래스는 Package member class 라고들 하며, 아래 항목에서 제외했다. 구글링해보면 클래스간에 관계나 큰 틀에서의 구조를 안잡고 나열하는 식이 많은 것 같다ㅋㅋ 1. 중첩 클래스는 왜 쓰는가?
sjh836.tistory.com
-> 그때그때 맞춰서 쓰라는 얘기
'책(독서)' 카테고리의 다른 글
[이펙티브자바] ~175p item 29 (0) | 2020.10.21 |
---|---|
[이펙티브자바] ~169p item 25~28 (0) | 2020.10.20 |
[이펙티브자바] ~135p item 17~20 (0) | 2020.10.13 |
[이펙티브자바] ~104p item 13~16 (0) | 2020.10.12 |
[이펙티브자바] ~76p item 9~12 (0) | 2020.10.12 |