Owl Life

GRASP 본문

Software Architecture

GRASP

Owl Life 2022. 12. 21. 23:57
반응형

GRASP Pattern

General Responsibility Assignment Software Pattern

**OO 디자인의 핵심은 각 객체에 책임을 부여 하는것** **책임을 부여하는 원칙을 말하는 패턴**

Informatoin Expert (제일 중요)

책임을 수행할 수 있는 데이터를 가지고 있는 객체에 책임을 부여하는 것. 객체는 데이터와 처리로직이 함께 묶여 있는것. 정보 은닉을 통해 자신의 데이터를 감추고 오직 메서드로만 데이터를 처리하고, 외부에는 그 기능(책임)만을 제공.

Creator

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

Controller

시스템 이벤트(사용자의 요청)을 맞이할 객체를 만들자. 처리 하는것이 아님.

<UseCaseName>Handler,
<UseCaseName>Coordinator,
<UseCaseName>Session

Low Coupling

객체들간, 서브 시스템들간의 상호의존도가 낮게 책임을 부여.

High Cohesion

각 객체가 밀접하게 연관된 책임들만 가지도록 구성.

Polymorphism

객체의 종류에 따라 행동양식이 바뀐다면, Polymorphism 기능을 사용하자. Object-Oriented 시스템은 상속과 Polymorphism(다형성)을 지원한다. 만약 객체의 종류에 따라 행동이 바뀐다면 객체의 종류를 체크하는 조건문을 사용하지 말고, Object-Oriented 시스템의 Polymorphism 기능을 사용하라.

Pure Fabrication

**Information Expert 패턴을 적용하면 Low Coupling과 High Cohesion의 원칙이 깨어진다면, 기능적인 역할을 별도로 한 곳으로 모으자.** 데이터베이스 정보를 저장하거나, 로그 정보를 기록하는 역할에 대해 생각해 보자. 각 정보는 각각의 객체들이 가지고 있을 것이다. 이 때 Information Expert 패턴을 적용하면, 각 객체들이 정보를 저장하고, 로그를 기록하는 역할을 담당해야 하지만, 실제로 그렇게 사용하는 사람들은 없다. 이것은 그 기능들이 시스템 전반적으로 사용되고 있기 때문에 각 객체에 그 기능을 부여하는 것은 각 객체들이 특정 데이터베이스에 종속을 가져오거나, 로그을 기록하는 매커니즘을 수정할 경우, 모든 객체를 수정해야 하는 결과를 가져온다. 즉 Low Coupling의 원칙이 깨어지게 된다. 이럴 경우에는 공통적인 기능을 제공하는 역할을 한 곳으로 모아서 가상의 객체, 서브시스템을 만들어라.

Indirection

두 객체 사이의 직접적인 Coupling을 피하고 싶으면, 그 사이에 다른 객체를 사용하라. 여기서 말하는 다른 객체란 인터페이스가 될 수 있고, 주로 인터페이스인 경우가 많다. 그런 특별한 경우는 아래에 설명된 Protected Variations 패턴이라고 부를 수 있다.

Protected Variations

변경될 여지가 있는 곳에 안정된 인터페이스를 정의해서 사용하자. JDBC에 대해서 생각해 보자. JDBC는 일련의 인터페이스들로 구성되어 있으며, 각 데이터베이스 벤더들이 인터페이스를 구현한 Concrete 클래스를 제공하고 있다. 데이터베이스 기능을 사용하는 시스템의 입장에선 각 벤더들이 구현방식을 바꾸었을 때, 자신의 코드를 수정하고 싶지 않을 것이다. 그래서 Driver를 로딩하는 코드를 제외하고는 모두 인터페이스를 사용함으로서 데이터베이스의 변경시에도 Driver 로딩만 바꾸어 주면 되도록 데이터베이스 관련 작업이 필요한 곳에는 안정된 JDBC 인터페이스를 사용한 것이다.

반응형

'Software Architecture' 카테고리의 다른 글

11. Re-engineering / Refactoring  (2) 2022.12.04
10. Architecture Evaluation  (0) 2022.12.04
9. Tactics for NFR  (0) 2022.12.04
8. Architecture Viewpoints  (0) 2022.12.04
7. Skeleton / Core Architecture  (0) 2022.12.04
Comments