포스트

GRASP 방법론

객체지향 설계에서 책임 할당에 대한 지침을 제공하는 방법론인 GRASP에 대해 알아보자.

  1. Information Expert (정보 전문가)
    • 책임을 수행하는 데 필요한 정보를 가지고 있는 객체에 책임을 할당합니다.
    • 예를 들어, Order 객체는 자신의 가격을 계산하는 책임을 가질 수 있습니다. 이 정보는 Order 객체에 존재하기 때문입니다.
  2. Creator (생성자)
    • 특정 객체를 생성할 책임을 다른 객체에 할당합니다.
    • 생성자는 보통 생성되는 객체를 포함하거나, 생성될 객체를 밀접하게 사용하는 객체입니다.
    • 예를 들어, Order 객체는 OrderLine 객체를 생성할 수 있습니다.
  3. Controller (컨트롤러)
    • 시스템 이벤트를 처리할 책임을 가지는 객체를 정의합니다.
    • 보통 시스템 운영의 주요 흐름을 제어하는 객체입니다.
    • 예를 들어, OrderController는 주문 프로세스를 관리할 수 있습니다.
  4. Low Coupling (낮은 결합도)
    • 객체 간의 상호 의존성을 최소화합니다.
    • 이는 시스템의 유지보수성을 높이고 변경에 유연하게 대처할 수 있게 합니다.
    • 예를 들어, 특정 클래스가 다른 클래스에 과도하게 의존하지 않도록 설계합니다.
  5. High Cohesion (높은 응집도)
    • 객체나 클래스가 연관된 책임을 가지도록 하여, 각 클래스가 잘 정의된 목적을 갖도록 합니다.
    • 이는 클래스의 유지보수성을 높이고 재사용성을 증가시킵니다.
    • 예를 들어, Customer 클래스는 고객 관련 책임만 가지고, 주문 관련 책임은 Order 클래스가 가지도록 합니다.
  6. Polymorphism (다형성)
    • 책임을 수행하는 객체의 종류에 따라 행동이 달라질 수 있도록, 동일한 인터페이스를 통해 책임을 할당합니다.
    • 예를 들어, Shape 인터페이스를 구현하는 CircleRectangle 클래스는 각각의 draw 메서드를 가집니다.
  7. Pure Fabrication (순수 가공물)
    • 문제 도메인 모델에 직접적으로 존재하지 않는 인위적인 클래스를 만들어 책임을 할당합니다.
    • 이는 응집도를 높이고 결합도를 낮추기 위해 사용됩니다.
    • 예를 들어, 로깅을 위한 Logger 클래스를 만들 수 있습니다.
  8. Indirection (간접화)
    • 두 객체 간의 직접적인 의존성을 줄이기 위해 중재 객체를 사용합니다.
    • 이는 결합도를 낮추고 유연성을 증가시킵니다.
    • 예를 들어, OrderPayment 간의 의존성을 줄이기 위해 PaymentProcessor를 사용할 수 있습니다.
  9. Protected Variations (변화 보호)
    • 변화를 예측하고, 그 변화가 다른 부분에 미치는 영향을 최소화하기 위해 인터페이스나 추상화를 사용합니다.
    • 예를 들어, 데이터베이스 접근을 추상화하여 데이터베이스의 변경이 다른 부분에 영향을 주지 않도록 합니다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.