Architecture (아키텍쳐)/OOP

GRASP

jw92 2021. 4. 27. 22:44

 

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