객체는 협력을 위해 존재한다.
협력은 객체가 존재하는 이유와 문맥을 제공한다.
객체지향 패러다임의 큰 장점은 설계를 재사용할 수 있다는 것이다. 하지만 재사용은 공짜로 얻어지지 않는다. 재사용을 위해서는 객체들의 협력 방식을 일관성 있게 만들어야 한다.
가능하면 유사한 기능을 구현하기 위해 유사한 협력 패턴을 사용하라.
구현의 가장 큰 문제점은 설계에 일관성이 없다는 것이다. 개념적으로는 연관돼 있지만 구현 방식에 있어서는 완전히 제각각이라는 것이다.
일관적인 설계가 아닐 경우 나타나는 문제점(비일관성)
결론은 유사한 기능을 서로 다른 방식으로 구현해서는 안 된다는 것이다. 유사한 기능은 유사한 방식으로 구현해야 한다.
규칙을 정의하는 새로운 클래스를 추가하기로 결정했다면, 클래스의 메서드 안에서 부모 클래스의 메서드를 호출하는 부분을 눈여겨 봐야한다.
먼저, 여러 규칙을 정의할 수 있는 인터페이스를 생성합니다. 이를 **Rule
**이라고 합시다. 각 규칙은 applyRule
메서드를 통해 특정 작업을 수행할 수 있습니다.
interface Rule {
void applyRule();
}