개발로그

Item 21 - 인터페이스는 구현하는 쪽을 생각해 설계하라

디폴트 메서드의 도입 자바 8 이전에는 기존 구현체를 깨뜨리지 않고는 인터페이스에 메서드를 추가할 방법이 없었다. 자바 8부터는 디폴트 메서드가 소개되면서 기존 인터페이스에 메서드를 추가할 수 있게 되었다. 그러나 이렇게 추가된 디폴트 메서드가 모든 기존 구현체들과 매끄럽게 연동되리라는 보장은 없다. 디폴트 메서드 추가 시 주의...

Item 20 - 추상 클래스보다는 인터페이스를 우선하라

인터페이스의 장점 자바 8부터 인터페이스도 디폴트 메서드를 제공할 수 있다. 기존 클래스에 손쉽게 새로운 인터페이스를 구현해 넣을 수 있다. BUT, 추상 클래스는 그렇지 않다. 새로 추가된 추상 클래스의 모든 자손이 상속 구조를 가지면서 혼란을 준다. 인터페이스는 믹스인(mixin) 정의에 안...

Item 19 - 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라

상속을 고려한 설계와 문서화 📃 (1) 상속용 클래스는 내부 구현을 문서로 남겨야 한다. 상속용 클래스는 재정의 할 수 있는 메서드들을 내부적으로 어떻게 이용하는지 문서로 남겨야 한다. 아래와 같이 @implSpec 태그를 이용해서 불필요하게 내부 구현 방식을 설명해야 한다. (2) 클래스의 내부 동작 과정 중간에 끼어 들어갈 수 있...

Item 15 - 클래스와 멤버의 접근 권한을 최소화하라

구현과 API를 분리하는 “정보 은닉”의 장점 시스템 개발 속도를 높인다. (여러 컴포넌트를 병렬로 개발할 수 있기 때문에) 시스템 관리 비용을 낮춘다. (컴퍼넌트를 더 빨리 파악할 수 있기 때문에) 성능 최적화에 도움을 준다. (최적화할 컴포넌트를 정한 후, 다른 컴포넌트에 영향끼치지 않고 해당 컴포넌트만 개선 가능하기 때문에) 소프...