더북(TheBook)

3.3.2 잠재적인 원인

전반적인 관점 부재

설계자나 개발자가 새로운 기능을 추가하려고 추상화를 만들 때, 일반적으로 지원이 필요한 실제 특정 요구 사항으로 초점을 제한한다. 이 과정에서 추상화가 밀접한 관계가 있는 모든 메서드를 완벽하게 지원하는지 파악하는 노력은 간과한다.

 

언어나 라이브러리 관례를 고수하지 않기

JDK에서 java.util.HashMap 컨테이너를 살펴보자. 주어진 입력 키를 기반으로 구성원을 인출하려고 get() 메서드는 먼저 hashCode() 메서드를 사용하여 계산한 입력 키의 해시 코드와 해시 맵에서 찾은 사상된 키를 비교한다. 그다음으로 입력 키에서 equals() 메서드를 호출하여 사상된 키와 일치하는지 점검한다. 이제 hashCode()equals() 메서드를 함께 재정의하지 않은 채 해당 클래스의 객체를 HashMap에서 사용하면 인출 메커니즘이 제대로 동작하지 않을 수도 있다. 따라서 자바 라이브러리는 클래스의 객체를 해시 기반 컨테이너에서 사용할 때 클래스 내부에서 두 메서드를 함께 재정의해야 한다는 관례를 요구한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.