본문 바로가기
SW 공부/Design Patterns

GRASP (GENERAL RESPONSIBILITY ASSIGNMENT SOFTWARE PATTERNS)

by 꼬냉상 2022. 8. 24.

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 구조설계 역량 강화를 위한 학습 목적으로 정리된 내용입니다.
일부 타/개인 단체에 저작권이 있는 자료를 포함하고 있으므로, 절대 영리 목적으로 사용하실 수 없습니다.

 

반응형

댓글