GoF 디자인 패턴
코드의 구조를 일정한 형태로 만들어 재사용이 편하며, 객체지향 설계 및 구현의 생산성을 높이는데 적합
- 생성패턴
- Abstract Factory (추상 팩토리)
-구체적인 클래스에 의존하지 않고 인터페이스를 통해 객체들의 그룹을 생성하여 추상적으로 표현
- Builder
-생성(construction)과 표기(representation)를 분리해 복잡한 객체를 생성
- Factory Method
-서브 클래스에서 객체 생성을 처리하도록 분리하여 캡슐화한 패턴
- Prototype
-기존 객체를 복제함으로써 객체를 생성
- Singleton (단일체)
-한 클래스에 한 객체만 존재하도록 제한
- 구조패턴
- Adapter (적응자)
-인터페이스가 호환되지 않는 클래스들을 함께 이용할 수 있도록, 타 클래스의 인터페이스를 기존 인터페이스에 덧씌움
- Bridge (가교)
-추상화와 구현을 분리해 둘을 각각 따로 발전시킬 수 있음
- Composite (복합체)
- 0개, 1개 혹은 그 이상의 객체를 묶어 하나의 객체로 이용할 수 있다.
- Decorator (장식자)
-기존 객체의 매서드에 새로운 행동을 추가하거나 오버라이드 할 수 있다.
- Façade (퍼사드)
-많은 분량의 코드에 접근할 수 있는 단순한 인터페이스를 제공한다.
- Flyweight (플라이급)
-다수의 유사한 객체를 생성·조작하는 비용을 절감할 수 있다.
- Proxy (프록시)
-접근 조절, 비용 절감, 복잡도 감소를 위해 접근이 힘든 객체에 대한 대역을 제공한다.
- 행위패턴
- Chain of Responsibility (책임연쇄)
-책임들이 연결되어 있어 내가 책임을 못 질 것 같으면 다음 책임자에게 자동으로 넘어가는 구조
- Command (명령)
-위의 명령어를 각각 구현하는 것보다는 위 그림처럼 하나의 추상 클래스에 메서드를 하나 만들고 각 명령이 들어오면 그에 맞는
서브 클래스가 선택되어 실행하는 것
- Interpreter (해석자)
-문법 규칙을 클래스화한 구조를 갖는SQL 언어나 통신 프로토콜 같은 것을 개발할 때 사용
- Iterator (반복자)
-반복이 필요한 자료구조를 모두 동일한 인터페이스를 통해 접근할 수 있도록 메서드를 이용해 자료구조를 활용할 수 있도록 해준다.
- Mediator (중재자)
-클래스간의 복잡한 상호작용을 캡슐화하여 한 클래스에 위임해서 처리 하는 디자인 패턴
- Memento (메멘토)
-Ctrl + z 와 같은 undo 기능 개발할 때 유용한 디자인패턴. 클래스 설계 관점에서 객체의 정보를 저장
- Observer (감시자)
-어떤 클래스에 변화가 일어났을 때, 이를 감지하여 다른 클래스에 통보해주는 것
- State (상태)
-동일한 동작을 객체의 상태에 따라 다르게 처리해야 할 때 사용하는 디자인 패턴
- Strategy (전략)
-알고리즘 군을 정의하고 각각 하나의 클래스로 캡슐화한 다음, 필요할 때 서로 교환해서 사용할 수 있게 해준다.
- Template Method
-상위 클래스에서는 추상적으로 표현하고 그 구체적인 내용은 하위 클래스에서 결정되는 디자인 패턴
- Visitor (방문자)
-각 클래스의 데이터 구조로부터 처리 기능을 분리하여 별도의 visitor 클래스로 만들어놓고 해당 클래스의 메서드가
각 클래스를 돌아다니며 특정 작업을 수행하도록 하는 것
UML
- 시스템을 모델로 표현해주는 모델링 언어
- 종류
'- 구조 다이어그램 : 클래스 다이어그램, 객체 다이어그램, 복합체 구조 다이어그램, 배치 다이어그램, 컴포넌트 다이어그램, 패키지 다이어그램
'- 행위 다이어그램 : 활동 다이어그램, 상태머신 다이어그램, 유즈 케이스 다이어그램, 상호작용 다이어그램
- 구성요소
'- 사물, 관계, 다이어그램
-
사물
1) 구조 사물
시스템의 개념적, 물리적 요소를 표현
클래스, 유즈케이스, 컴포넌트, 노드
2) 행동 사물
시간과 공간에 따른 요소들의 행위를 표현
상호작용, 상태머신
3) 그룹 사물
요소들을 그룹으로 묶어서 표현
패키지
4) 주해 사물
부가적인 설명이나 제약조건 등을 표현
노트
-
관계
1) 연관 관계
2개 이상의 사물이 서로 관련됨
사람 -> 집 (집은 누구에게 포함되는지 모름)
선생님 - 학생
2) 집합 관계
하나의 사물이 다른 사물에 포함되어 있는 관계(둘은 독립적)
컴퓨터 ◇- 프린터
3) 포함 관계
집합 관계의 특수한 형태로, 포함하는 사물의 변화가 포함되는 사물에 영향을 미치는 관계
문 ◆- 키
4) 일반화 관계
하나의 사물이 다른 사물에 비해 더 일반적인지 구체적인지 표현
커피 ◁- 아메리카노
◁- 에스프레소
5) 의존 관계
연관 관계와 같이 서로 연관은 있으나 필요에 의해 짧은 시간동안만 연관을 유지하는 관계
등급 <--- 할인율
6) 실체화 관계
사물과 사물의 기능을 그룹화한 관계
날 수 있는 ◁- 비행기
◁- 새
-
다이어그램
-
구조
1) 클래스 다이어그램 : 시스템을 구성하는 클래스 사이의 관계를 표현
2) 객체 다이어그램 : 클래스에 속한 객체들(인스턴스)를 특정 시점의 객체와 객체 사이의 관계로 표현, 럼바우 객체지향 분석기법에서 활용
3) 컴포넌트 다이어그램 : 실제 구현 모듈인 컴포넌트 간의 관계나 인터페이스를 표현
4) 배치 다이어그램 : 물리적 요소들의 위치를 표현
5) 복합체 구조 다이어그램 : 클래스나 컴포넌트가 복합 구족를 갖는 경우 그 내부 구조를 표현
6) 패키지 다이어그램 : 유스케이스나 클래스 등의 모델 요소들을 그룹화한 패키지들의 관계
-
행위
1) 유스케이스 다이어그램 : 사용자의 요구를 분석
2) 시퀀스 다이어그램 : 상호 작용하는 시스템이나 객체들이 주고받는 메세지를 표현
3) 커뮤니케이션 다이어그램 : 시퀀스 다이어그램 + 객체들 간의 연관까지 표현
4) 상태 다이어그램 : 객체가 속한 클래스의 상태 변화를 표현
5) 활동 다이어그램 : 객체의 처리 로직이나 조건에 따른 처리의 흐름을 순서에 따라 표현
- 스테레오 타입
UML에서 표현하는 기본 기능 외에 추가적인 기능을 표현하기 위해 사용
<<>> 사이에 표현할 형태를 기술