GoF(Gang of Four) 란?
《디자인 패턴》(Design Patterns, ISBN 0-201-63361-2)은 소프트웨어 설계에 있어 공통된 문제들에 대한 표준적인 해법과 작명법을 제안한 책이다. 이 분야의 사인방(Gang of Four, 줄여 GoF)으로 불리는 에리히 감마(Erich Gamma), 리처드 헬름(Richard Helm), 랄프 존슨(Ralph Johnson), 존 블리시데스(John Vlissides)가 같이 썼고, 한국어 판은 김정아의 번역으로 피어슨 에듀케이션 코리아를 통해 출판되었다.
책의 첫 번째 반절은 다양한 디자인 패턴의 정의에 할애하고 있고, 나머지 반절은 실제적으로 유용한 디자인 패턴들을 나열하고 있다. 책의 예제들은 객체지향적인 언어인 C++과 스몰토크로 제시되고 있다. 다음은 책에서 언급되고 있는 패턴의 리스트이다.
생성 패턴(Creational Patterns) 5:
객체 생성에 대한 패턴 / 캡슐화+유연성 목표
추상 팩토리 (Abstract Factory) | 상위 클래스의 객체 생성코드를 하위클래스가 상속받는다(상위변경=하위자동변경) |
빌더 (Builder) | 분리된 인스턴스를 조합하여 객체 생성. 같은 객체를 생성해도 다른 결과를도출할 수 있음 |
팩토리 메소드 (Factory Method) | 객체 생성 코드를 하위클래스에서 구체화. 상위 클래스는 인터페이스만 제공(각각 다른작업수행) |
프로토타입(Prototype) | 원본을 복제하는 형태로 객체 생성, 비용 저렴 |
싱글턴(Singleton) | 클래스 내 생성되는 인스턴스가 하나만 필요할 때 사용(동시참조X) |
구조 패턴(Structural Patterns) 7:
구조가 복잡한 시스템 개발에 도움을 줄 수 있음
어댑터(Adapter) | 일치하지 않는 인터페이스 변환 (전류 어댑터와 같은 역할) |
브릿지(Bridge) | 추상층(기능)과 구현층(구체화)을 분리하여 서로 독립적 확장 가능 |
합성(Composite) | 트리구조로 구성 |
데코레이터(Decorator) | 클래스에 기능을 추가하기 위해 다른 객체를 덧붙이는 형태 |
파사드(Facade) | 다수의 서브클래스들의 통합 인터페이스를 제공할 수 있는 Wrapper 객체 구성 |
플라이웨이트(Flyweight) | 다수의 유사 객체 생성이 필요할 때 메모리 절약을 위해 최대한 공유해서 사용하는 형태 |
프록시(Proxy) | 접근이 어려운 객체에 접근할 수 있도록 인터페이스 역할 수행 |
행동 패턴(Behavioral Patterns) 11:
상호작용이나 책임 분배에 대한 부분을 정의하고 결합도는 최소화 하는 것이 목표
책임 연쇄(Chain of Responsibility) | 요청을 처리할 수 있는 객체가 둘 이상 존재하여 한 객체가 처리하지 못하면 다음 객체로 넘어가는 형태의 패턴. 각 객체들이 고리(Chain)으로 묶여있어 요청이 해결될 때까지 고리를 따라 책임이 넘어간다. |
커맨드(Command) | 명령어를 캡슐화하여 재사용하거나 취소할 수 있도록 필요한 정보를 로그에 남기는 형태 |
인터프리터(Interpreter) | 언어에 문법 표현을 정의하는 패턴 |
반복자(Iterator) | 접근이 잦은 객체는 동일한 인터페이스를 사용하도록 하는 패턴 |
중재자(Mediator) | 상호작용을 캡슐화하여 결합도를 낮추기위해 사용 |
메멘토(Memento) | 특정 시점에서의 객체 내부 상태를 객체화함으로써 이후 요청에 따라 객체를 해당 시점의 상태로 돌릴 수 있는 기능을 제공하는 패턴이다. Ctrl+Z 기능이 이 패턴의 대표적 기능 |
옵저버(Observer) | 이벤트 발행과 구독, 상태 변화 전달. 한 객체의 상태가 변화하면 객체에 상속되어있는 다른 객체들에게 변화된 상태를 전달하는 패턴. 카톡의 읽음표시 같은 느낌 |
상태(State) | 이벤트를 객체 상태에 따라 다르게 처리해야할 때 사용. 카톡 알림설정 같은 느낌 |
전략(Strategy) | 동일 계열 알고리즘 상호 교환, 독립적 사용 |
템플릿 메소드(Template Method) | 상위에서 인터페이스를 정의하고 하위에서 구체화시킴 (유지보수 쉬워짐) |
방문자(Visitor) | 처리 기능을 별도의 클래스로 구성. 분리된 처리 기능은 각 클래스를 방문(Visit)하여 수행한다. |
[소프트웨어 설계] Use Case(유스케이스) 란?
Use Case(유스케이스)란? 유스케이스의 예시 유스케이스(use case)는 행위자(actor)가 관심을 가지고 있는 유용한 일을 달성하기 위한 시나리오의 집합을 명시한다 (ex. 음료 자판기의 유스케이스: "
y-oni.tistory.com
[소프트웨어 설계] 소프트웨어 아키텍처(Architecture)
[소프트웨어 설계] 소프트웨어 아키텍처(Architecture) 소프트웨어 아키텍처(Architecture) [마틴 파울러] 소프트웨어 아키텍처의 중요성 (한글자막) 소프트웨어 아키텍처의 정의 아키텍처란 소프트웨
y-oni.tistory.com
'2021 정보처리기사 > 참고자료: 정보처리기사' 카테고리의 다른 글
사칙연산의 우선순위는 어떻게 결정될까? (0) | 2021.03.30 |
---|---|
공통모듈 설계하기 (0) | 2021.03.25 |
Use Case(유스케이스) 란? (0) | 2021.03.23 |
소프트웨어 아키텍처(Architecture) (0) | 2021.03.22 |
객체 지향 개발의 특성, 캡슐화 (0) | 2021.03.18 |