서론

객체는 협력을 위해 존재한다.

협력은 객체가 존재하는 이유와 문맥을 제공한다.

객체지향 패러다임의 큰 장점은 설계를 재사용할 수 있다는 것이다. 하지만 재사용은 공짜로 얻어지지 않는다. 재사용을 위해서는 객체들의 협력 방식을 일관성 있게 만들어야 한다.

가능하면 유사한 기능을 구현하기 위해 유사한 협력 패턴을 사용하라.


구간별 방식 구현하기

구현의 가장 큰 문제점은 설계에 일관성이 없다는 것이다. 개념적으로는 연관돼 있지만 구현 방식에 있어서는 완전히 제각각이라는 것이다.

일관적인 설계가 아닐 경우 나타나는 문제점(비일관성)

  1. 새로운 구현을 추가해야 하는 상황 (=기존의 구현을 이해해야 하는 상황) 요구사항의 관점에서는 여러 개의 규칙을 사용한다는 공통점을 공유하지만 구현 방식은 완전히 다르다. 세 가지 기본 정책에 대한 세 가지 다른 구현 방식이 존재하는 것이다.
  2. 코드를 이해하기 어렵다.

결론은 유사한 기능을 서로 다른 방식으로 구현해서는 안 된다는 것이다. 유사한 기능은 유사한 방식으로 구현해야 한다.

규칙을 정의하는 새로운 클래스를 추가하기로 결정했다면, 클래스의 메서드 안에서 부모 클래스의 메서드를 호출하는 부분을 눈여겨 봐야한다.

기본 클래스 및 인터페이스 정의

먼저, 여러 규칙을 정의할 수 있는 인터페이스를 생성합니다. 이를 **Rule**이라고 합시다. 각 규칙은 applyRule 메서드를 통해 특정 작업을 수행할 수 있습니다.

interface Rule {
    void applyRule();
}

규칙 구현