티스토리 뷰

  • 디자인 패턴
  • 기본 패턴 ( 디자인 패턴 1 )
  • 생성 패턴
  • 구조 패턴
  • 행동 패턴 ( 디자인 패턴 2 )

 


디자인 패턴

 

  • 디자인 패턴      

→ 설계에서 특정 문제를 해결하기 위해 반복적으로 사용되는 해결책의 모음, 상호교류 하는 객체와 클래스에 대한 설명

→ 어떤 상황의 문제에 대한 해법

→ 전문가의 노하우를 모아 놓은 것

→ 코드의 견고함, 재사용 용이하게 함

→ 패턴 이름 : 설계의 의도 파악

→ 문제 : 해결할 문제와 배경

→ 해법 : 설계를 구성하는 요소, 요소들의 관계, 책임, 협력 관계에 대한 서술

→ 결과 : 디자인 패턴을 적용해서 얻은 장단점

 

  • 설계 목표

→ 재사용성 , 융통성, 유지보수성 ( 코드의 일반화, 의존성 최소화 )

→ 강인성, 충분함, 정확성 ( 모듈화된 설계 , 강인한 부품 )

 

  • 디자인 패턴 고르기

→ 패턴의 의도 / 어떤 문제를 해결하는지 / 다른 패턴과의 관계를 파악

→ 설계의 가변성, 재설계의 원인 파악

→ 변화를 수용하는 설계

→ 객체의 직접 생성X

→ 연산 / 플랫폼 / 알고리즘 대한 의존성은 낮아야 함

→ 추상 팩토리, 가교, 메멘토, 프록시, 빌더, 반복자, 템플릿 메서드의 사용

→ 객체의 표현이나 구현을 감춘다

→ 계층화와 추상성을 이용한 낮은 결합도

→ 객체 합성과 재정의를 통한 서브 클래싱

 

  • GoF 디자인 패턴

1. 생성 패턴

→ 인스턴스를 만드는 절차를 추상화하는 패턴

→ 객체의 생성, 합성, 표현과 시스템을 분리한다

 

1-1. 팩토리 메서드

→ 객체를 생성하는 인터페이스는 미리 정의

→ 인스턴스를 만드는 것은 서브 클래스에서 결정

→ 인스턴스를 만드는 시점을 서브 클래스에 위임

 

1-2. 원형 ( Prototype )

→ 생성할 객체의 종류의 원형이 되는 예시물을 이용

→ 원형을 복사함으로써 새로운 객체 생성

 

1-3. 추상 팩토리

→ 구체적인 클래스 지정 X

→ 관련성을 갖는 객체의 집합을 생성

→ 서로 독립적인 객체들의 집합을 생성할 수 있는 인터페이스를 제공

 

1-4. 빌더

→ 복합 객체의 생성과 표현 방법을 분리

→ 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 한다

 

1-5. 단일체 ( Singleton )

→ 어떤 클래스의 인스턴스는 오직 하나임을 보장

→ 위 인스턴스에 접근할 수 있는 전역적 접촉점을 제공하는 패턴

 

 

2. 구조 패턴

→ 더 큰 구조를 형성하기 위해 클래스와 객체를 어떻게 합성하는지에 대한 패턴

→ 상속을 이용한 인터페이스나 구현을 복합

 

2-1. 적응자 ( Adapter )

→ 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환

→ 호환성이 없는 인터페이스로 인해 동작 불가능한 클래스들을 작동하게 한다

 

2-2. 가교 ( Bridge )

→ 구현부에서 추상층을 분리 / 독립적으로 변형 가능

 

2-3. 복합체 ( Composite )

→ 객체들의 관계를 트리 구조로 구성

→ 부분-전체 계층을 표현

→ 사용자가 단일 / 복합 객체를 동일하게 다루게 한다

 

2-4. 장식자 ( Decorator )

→ 객체에 책임을 덧붙이는 패턴

→ 기능 확장이 필요할 때 서브클래싱 대신 쓸 수 있는 유연한 대안

 

2-5. 퍼사드 ( Façade )

→ 서브시스템에 있는 인터페이스 집합에 대해 하나의 통합 인터페이스를 제공

→ 서브시스템을 쉽게 사용하게 하는 상위 인터페이스 제공

 

2-6. 플라이급 ( Flyweight )

→ 크기가 작은 객체를 공유해 효율적인 지원

 

2-7. 프록시 ( Proxy )

→ 어떤 다른 객체로 접근하는 것을 통제하기 위해 대리자(surrogate) 나 자리채움자(placeholder)를 제공

 

 

3. 행동 패턴

→ 응용 프로그램에 따라 해동이 다른 객체로 옮겨지거나 or 알고리즘이 대체되는 변화를 만족하는 패턴

→ 객체나 클래스에 대한 패턴의 정의 X / 객체와 클래스의 교류 방법에 대한 정의 O

 

3-1. 책임 연쇄 ( Chain Responsibility )

→ 요청 전송 객체와 요청 수신 객체의 결합을 피하는 기능

→ 요청 수신 객체를 연쇄적으로 묶고, 요청 처리 객체를 만날 때 까지 chain 을 따라 요청 전달

 

3-2. 명령 ( Command )

→ 요청을 객체의 형태로 캡슐화

→ 요청이 다른 사용자의 매개변수화

→ 요청 저장/로깅/연산의 취소 지원

 

3-3. 해석자 ( Interpreter )

→ 주어진 언어의 문법 표현 수단 정의

→ 주어진 언어로 작성된 문장의 해석기

 

3-4. 반복자 ( iterator )

→ 내부를 노출하지 않고, 어떤 객체 집합에 속한 원소를 순차적으로 접근할 수 있는 방법 제공

 

3-5. 중재자 ( Mediator )

→ 한 집합에 속해있는 객체들의 상호작용을 캡슐화하는 객체를 정의

→ 객체들이 서로 직접 참조하지 않도록 함

→ 객체들 사이에 소결합(loose coupling) 촉진

→ 객체들의 상호작용을 독립적으로 다양화

 

3-6. 메멘토 ( Memento )

→ 캡슐화를 위배하지 않고, 객체의 내부 상태를 실체화

 

3-7. 감시자 ( Observer )

→ 객체 사이에 일 대 다 의존관계를 정의

→ 어떤 객체가 변할 때 그 객체의 의존하는 다른 객체들이 변화를 통지받고 자동으로 갱신되게 함

 

3-8. 상태 ( State )

→ 객체가 내부 상태에 따라 스스로 행동을 변경하도록 허가

→ 객체가 마치 자신의 클래스를 변경하는 것처럼 보이게 함

 

3-8. 전략 ( Strategy )

→ 동일 계열의 알고리즘군 정의 / 캡슐화 / 상호교환을 가능하게 함

→ 알고리즘을 사용자와 관계없이 다양하게 변경할 수 있게 함

 

3-8. 템플릿 메서드

→ 객체의 연산에 알고리즘의 뼈대만을 정의

→ 각 단계에 수행할 구체적 처리 / 알고리즘 처리는 서브 클래스로 위임

 

3-9. 방문자 ( Visitor )

→ 객체 구조를 이루는 원소에 대해 수행할 연산을  표시

→ 연산을 적용할 원소의 클래스를 변경하지 않고 새로운 연산 정의 가능

 

  • 요약

생성 패턴

à 추상 팩토리 : 제출 객체군

à 빌더 : 복합 객체 생성 방법

à 팩토리 메서드 : 인스턴스화할 객체의 서브 클래스

à 원형 : 인스턴스화될 객체 클래스

à 단일체 : 클래스의 인스턴스가 하나인 경우

 

구조 패턴

→ 적응자 : 객체에 대한 인스턴스

→ 가교 : 객체 구현

→ 복합체 : 객체의 합성 / 구조

→ 장식자 : 서브클래싱 없이 객체의 책임성

→ 퍼시드 : 서브 시스템에 대한 인터페이스

→ 플라이급 : 객체의 저장 비용

→ 프록시 : 객체 접근 방법

 

행동 패턴

→ 책임 연쇄 : 요청을 처리하는 객체

→ 명령 : 요청 처리 시점 / 처리 방법

→ 해석자 : 언어의 문법 / 해석

→ 반복자 : 집합 객체 요소들의 접근 방법 / 순회 방법

→ 중재자 : 객체들의 상호작용

→ 메멘토 : 어떤 정보를 언제 외부에 저장하는지

→ 감시자 : 다른 객체에 종속적인 객체 수 / 상태 변경 방법

→ 상태 : 객체의 상태

→ 전략 : 알고리즘

→ 템플릿 메서드 : 알고리즘 단계

→ 방문자 : 객체에 적용할 수 있는 연산

 

 


기본 패턴

 

 

  • 객체지향 패턴

1. 개념 실체 패턴 : 객체의 정보 공유

→ 실체 : 공통된 정보를 가진 멤버

→ 개념 : 공유하는 정보를 담은 클래스

 

2. 플레이어 역할 패턴 : 하나의 클래스에 다양한 역할을 표현

→ 플레이어가 환경에 따라 다른 역할을 해야 할 때

 

3. 위임 패턴 : 다른 클래스가 가진 특정 오퍼레이션을 활용해 책임을 위임하는 패턴

→ 다른 클래스의 오퍼레이션에 작업을 요청

→ 상속보다 연관을 통해 효과적인 재사용

 

4. 계층 구조 패턴 : 계층 관계를 묶어 동일한 처리를 하고 싶은 경우

→ 회사의 조직도 / 트리 / 파일 구조를 다룰 때 용이

 

 

'전공 > 소프트웨어 공학' 카테고리의 다른 글

10. 구현  (0) 2023.07.11
9. 디자인 패턴 2  (0) 2023.07.07
7. 아키텍처 설계 2  (0) 2023.07.07
6. 아키텍처 설계 1  (0) 2023.07.03
5. 클래스 모델링  (0) 2023.04.12