객체지향 디자인 패턴 - 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://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 |