본문 바로가기

프로그래밍

GRASP 패턴

객체지향 디자인 패턴 - General Responsibility Assignment Software Patterns

기본 5가지 패턴들

Creator

 - 객체의 생성은 생성되는 객체의 컨텍스트를 알고 있는 다른 객체가 있다면, 컨텍스트를 알고 있는 객체에 부여하자

 - A 객체와 B 객체의 관계가 다음 중 하나라면 A의 생성을 B의 역할로 부여하자

- B 객체가 A 객체를 포함하고 있다.

- B 객체가 A 객체의 정보를 기록하고 있다.

- A 객체가 B 객체의 일부이다.

- B 객체가 A 객체를 긴밀하게 사용하고 있다.

- B 객체가 A 객체의 생성에 필요한 정보를 가지고 있다.


Information Expert

 - 역할을 수행할 수 있는 정보를 가지고 있는 객체에 역할을 부여하자

 - 객체는 데이터와 처리로직이 함께 묶여 있는 것이다.

 - 정보 은닉을 통해 자신의 데이터를 감추고, 외부에는 그 기능(method)만을 제공한다.


Controller

 - 시스템 이벤트(사용자의 요청)를 처리할 객체를 만들자

 - 시스템, 서브시스템으로 들어오는 외부 요청을 처리하는 객체를 만들어 사용하라

 - 어떤 서브시스템안에 있는 각 객체의 기능을 직접 사용한다면?

- 서브시스템과 외부간의 coupling이 증가

- 서브시스템의 객체를 수정할 경우, 외부에 주는 충격이 큼

 - 서브시스템을 사용하는 입장에서 보면, Controller 객체만 알고 있으면 되므로 사용하기 쉽다.


Low Coupling

 - 객체간, 서브 시스템간의 상호의존도가 낮게 역할을 부여하자

 - 각 객체, 서브시스템의 재 사용성을 높이고, 시스템 관리를 편하게 한다.


High Cohesion

 - 각 객체가 밀접하게 연관된 역할들만 가지도록 역할을 부여하자



4가지 추가 패턴들

PolyMorphism

 - 객체의 종류에 따라 행동양식이 바뀌면, 객체의 종류를 체크하는 조건문을 사용하지 말고 polymorphism(다형성) 기능을 사용하자


Pure Fabrication

 - 기능적인 역할을 별도의 객체로 모아 관리하자


Indirection

 - 두 객체 사이에 직접적인 coupling을 피하고 싶으면, 그 사이에 다른 객체를 사용하자

 - 다른 객체는 주로 인터페이스인 경우가 많고, 이런 경우는 아래의 protected variations 패턴이라고 할 수 있다.


Protected Variations

 - 변경될 여지가 있는 곳에 안정된 인터페이스를 정의해서 사용하자



[참조]

https://vandbt.tistory.com/9

https://m.blog.naver.com/kbh3983/220778008888

https://nesoy.github.io/articles/2019-05/GRASP-Pattern


'프로그래밍' 카테고리의 다른 글

FQDN - Fully Qualified Domain Name  (0) 2020.07.06
디미터 법칙  (0) 2020.04.24
TDD, BDD, DDD, RDD  (0) 2020.04.21
GraphQL  (0) 2019.10.01
함수객체와 모나드  (0) 2019.08.19