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