[Effective Java] 인터페이스는 구현하는 쪽을 생각해 설계하라.


[Effective Java] 인터페이스는 구현하는 쪽을 생각해 설계하라.

인터페이스는 구현하는 쪽을 생각해 설계하라. 자바 8부터 인터페이스에 메서드를 추가할 수 있는 디폴트 메서드가 추가됨 디폴트 메서드를 선언하면, 인터페이스를 구현한 후 디폴트 메서드를 재정의하지 않는 모든 클래스에서 디폴트 구현이 쓰이게 된다. 하지만 모든 구현체들과 매끄럽게 연동된다는 보장이 없음. 생각할 수 있는 모든 상황에서 불변식을 해치지 않는 디폴트 메서드를 작성하기란 어렵다. java 8의 Collection 인터페이스에 추가된 removeIf이다. 이 코드도 충분히 범용적이지만 그렇다고 해서 이 코드가 모든 Collection 구현체와 잘 어울리는 것은 아니다. 대표적으로 SynchronizedCollection이다. 이 클래스는 모든 메서드에 주어진 락 객체로 동기화한 후 내부 컬렉션 객체에 기능을 위임하는 래퍼클래스이다. 만일 removeIf를 사용한다면 모든 메서드 호출을 동기화해주지 못한다. removeIf의 구현은 동기화에 관해 아무것도 모르기에 객체를 사용할 ...


#effectivejava #java #이펙티브자바 #자바

원문링크 : [Effective Java] 인터페이스는 구현하는 쪽을 생각해 설계하라.