GRASP Principles
General Responsibility Assignment Software Patterns
- Craig Larman의 9가지 원칙
- will guide you how to assign responsibilities (객체들간의 계약 - 알아야 하는 것 /해야 하는 것) to collaborating objects
- 어떤 책임을 지게하나,'어떻게?'의 답을 제공하는 설계 원칙
① Creator Pattern
- 여러 class 후보 중, 누가 create 할 것인가!
- prefer “B contains or aggregates A” (A집합의 형태)
- prefer B records A, B closely uses A, B has the initializing data for A
→이점 : Low Coupling is supported
② Information Expert Pattern
- Responsibility를 누구한테? 그 처리할 정보가 있는 class에게!
- Assign a responsibility to the class that has the information needed to fulfill it.
→이점 : Information encapsulation → supports low coupling
③ Controller Pattern
- UI에서 오는 요청은 누가 처리할 것인가? Control 객체를 만들어서 처리
- 첫 번째 방법 facade contoroller : 시스템 전체를 대표하는 entity가 처리
- 두 번째 방법 use case or session controller : 전체 구조가 큰 경우, session 별로 분리해서
→이점 : GUI에 application logic이 없으므로 재사용성이 높아짐
④ Low Coupling Pattern
- 여러 가지 선택지가 있을 때, 불필요한 Coupling을 줄이는 방향으로 선택하라!
- Assign responsibilities so that (unnecessary) coupling remains low.
→이점 : reduces the impact of change.
⑤ High Cohesion Pattern
- 여러가지 선택지가 있을때, 응집도가 높은 안을 선택하라!
- Assign responsibilities so that cohesion remains high.
⑥ Pure Fabrication Pattern
- 도메인 모델에 전혀 없는 새로운 객체를 디자인 단계에서 만드는 경우가 생김
- ex) DB related → create new class
- Assign a highly cohesive set of responsibilities to an artificial or convenience "behavior" class that does not represent a problem domain concept something made up, in order to support high cohesion, low coupling, and reuse.
⑦ Polymorphism Pattern
- 특정한 type의 객체마다 다른 behavior를 보여야 할 때, polymorphism을 활용하라!
- When related alternatives or behaviors vary by type (class), assign responsibility for the behavior using polymorphic operations to the types for which the behavior varies.
- cost 문제가 발생할 수 있으니, Interface 선언해 놓고... 처음에는 simple하게 → 필요할 때 확장!
⑧ Indirection Pattern
- 직접적인 coupling을 줄이기 위해, 중재할 수 있는 객체를 도입!
- Assign the responsibility to an intermediate object to mediate between other components or services, so that they are not directly coupled.
→이점 : Low Coupling
- Example: Adapter, Facade, Proxy, Mediator, …
⑨ Protected Variations Pattern
- 변화가 많은 mechanism을 안전하게 보호하는 stable 한 interface를 만들어서 그것을 중심으로 구현
- Identify points of predicted variation or instability
Quiz) 어떤 class가 학생이 받는 최종 점수를 결정해야 하는가? 답변의 근거가 되는 GRASP 패턴은?
-> Information Expert pattern을 근거로 Student class에 책임이 할당되어야 합니다.
왜냐하면 그것은 모든 WorkItem에 대해 알고 있기 때문이다.
Student 클래스는 WorkItem 클래스에 의존하여 개별 점수를 결정합니다.
본 글은 개인의 S/W 구조설계 역량 강화를 위한 학습 목적으로 정리된 내용입니다.
일부 타/개인 단체에 저작권이 있는 자료를 포함하고 있으므로, 절대 영리 목적으로 사용하실 수 없습니다.
'SW 공부 > Design Patterns' 카테고리의 다른 글
[디자인패턴] Observer Pattern(옵저버 패턴) (2) | 2022.08.27 |
---|---|
[디자인패턴] Strategy Pattern(전략패턴) (2) | 2022.08.27 |
SOLID PRINCIPLES (2) | 2022.08.23 |
OBJECT-ORIENTED PARADIGM (4) | 2022.08.23 |
디자인패턴 공부를 시작하며 /GoF 디자인패턴 (2) | 2022.08.23 |
댓글