객체지향 생활체조-규칙8
해당 글은 developerFarm 개발자 블로그의 농장객체지향 생활체조를 참고하여 정리한 글 입니다.
규칙8. 일급 콜렉션 사용
이 규칙의 적용은 간단하다. 콜렉션을 포함한 클래스는 반드시 다른 멤버 변수가 없어야 한다. 각 콜렉션은 그 자체로 포장돼 있으므로 이제 콜렉션과 관련된 동작은 근거지가 마련된 셈이다. 필터가 이 새 클래스의 일부가 됨을 알 수 있다. 필터는 또한 스스로 함수 객체가 될 수 있다. 또한 새 클래스는 두 그룹을 같이 묶는다든가 그룹의 각 원소에 규칙을 적용하는 등의 동작을 처리할 수 있다. 이는 인스턴스 변수에 대한 규칙의 확실한 확장이지만 그 자체를 위해서도 중요하다. 콜렉션은 실로 매우 유용한 원시 타입이다. 많은 동작이 있지만 후임 프로그래머나 유지보수 담당자에 의미적 의도나 단초는 거의 없다.
글만 보면 이해가 안되는 부분이 상당히 많을 뿐더러, 저 스스로도 명확하게 이해가 안가고 있습니다. 제가 이해한 부분을 조심스럽게 말해보자면 개발자는 컬렉션을 사용하면서 특정 메서드를 호출할 때 기대하는 응답이 있습니다. 하지만 래핑한 클래스에서 개발자가 기대한 값을 응답해 주지 않는다면 어떻게 될까요?
다음과 같은 컬렉션을 래핑한 클래스를 만들었다고 가정해 봅시다.
public CustomArrayList<E> {
private List list = new ArrayList<E>();
private boolean isEven = false;
public boolean add(E e) {
if (isEven)
list.add(e);
isEven = !isEven;
}
}
위의 코드는 add()
메서드를 호출할 때 짝수번째 호출에서만 값을 추가하고 있습니다. 위의 클래스를 사용하는 개발자 입장에서 해당 클래스가 짝수번째로 호출한 값만을 추가하는지 알 수가 없습니다.
클래스를 생성할 때 우리는 클래스를 사용하는 사용자 관점에서 작성하는 방법을 항상 고려해야 합니다. 특히 컬렉션의 경우 우리가 알게모르게 항상 사용하고 있고, 대부분의 개발자 분들이 메서드의 기대값을 알고 있습니다. 이러한 상황에서 잘못된 캡슐화를 통해 사용자가 기대한 값을 응답하지 않는다면 의도치 않은 오류가 발생하는 코드를 작성하게 됩니다.
댓글남기기