OO Design Principle 중 가장 널리 알려진 것은 SOLID 원칙입니다.
2021.04.25 - [Architecture (아키텍쳐)/DesignPattern] - SOLID Principle
하지만 GRASP 도 그에 못지 않게 널리 알려져있고 중요한 원칙입니다.
GRASP란 무엇일까요?
Craig Larman에 의해 만들어졌으며
GRASP는 General Responsibility Assignment Software Pattenrs의 약자로
한국어로 직역해보면
"일반적인 책임 할당 소프트웨어 패턴" 입니다.
즉 GRASP는 상호작용하는 Object에 어떻게 Responsibilities를 할당하는 지에 대한 내용을 담고 있다고 할 수 있습니다.
여기서 Responsibility란 정확히 어떤 의미일까요?
영어로는 다음과 같이 정의합니다. “a contract or obligation of a class”
"class의 계약 또는 의무" 정도로 해석이 되겠죠?
Responsibility는 크게 2가지로 분류합니다.
Knowing responsibilities
- knowing about private encapsulated data
- knowing about related objects
- knowing about things it can derive or calculate
- Ex) "a Sale is responsible for knowing its total"
Doing responsibilities
- doing something itself
- initiating action in other objects
- controlling and coordinating activities in other objects
- Ex) "a Sale is responsible for creating SalesLineItems"
위에서 알 수 있다시피
Responsibility는 method와 같은 의미가 아닙니다.
Responsibilities를 달성하기 위해 method를 구현하는 것입니다.
Modularity
GRASP에 대해 알아보기 전에 이 Modularity(모듈화)에 대하여 알아야합니다.
Modularity가 바로 Design의 목표라고 할 수 있습니다.
Modularity란 System을 Module들로 나누고 Components 간에 책임을 할당하는 것입니다.
Modularity를 하게 되면
Module 사이에 작고 간단하고 잘 정의된 interface가 존재하며,
비슷한 기능을 하는 그룹이 묶여 한 모듈에 정의가 되어
개발자의 입장에서 복잡도가 줄어들게 됩니다.
이 Modularity를 측정하는 척도는 2가지가 있습니다.
Coupling과 Cohesion 입니다.
Coupling: Module끼리 얼마나 의존도를 가지고 있는지에 대한 값입니다.
저희는 모듈 간 Coupling이 낮도록 모듈화해야 합니다.
Cohesion: 한 Module 내의 element가 얼마나 밀접하게 관련이 있는지에 대한 값입니다.
예를 들어 아래 그림에서 하나의 무늬가 하나의 기능이라면, 그 기능은 하나의 Module이 아닌 각각의 Module에 나누어 할당해주는 것입니다.
따라서 저희는 Module의 Cohesion을 높게 모듈화해야 합니다.
GRASP의 9가지 원칙
그렇다면 Modularity를 잘 하기 위해서는 어떻게 해야할까요?
GRASP 에서는 9가지 원칙을 제시하고 있습니다.
- Information Expert
- Creator
- Controller
- Low Coupling
- High Cohesion
- Polymorphism
- Pure Fabrication
- Indirection
- Protected variations
'Architecture (아키텍쳐) > OOP' 카테고리의 다른 글
DIP (The Dependency Inversion Principle) (0) | 2022.10.14 |
---|---|
SOLID Principle (0) | 2021.04.25 |