관리 메뉴

hye-_

7. 디자인 패턴 - 16. 디자인 패턴 본문

정처기/소프트웨어 설계

7. 디자인 패턴 - 16. 디자인 패턴

hyehh 2023. 4. 15. 15:58
728x90
반응형
SMALL
728x90
반응형
SMALL

16. 디자인 패턴

1. 디자인 패턴의 개념

2. 디자인 패턴의 장단점

3. 디자인 패턴 구성요소

4. 디자인 패턴 분류


1. 디자인 패턴 (Design Pattern) 개념

자주 사용하는 설계 형태를 정형화(일정한 형식이나 틀로 고정)하여 유형별로 설계 템플릿을 만들어 두고 소프트웨어 개발 중 나타나는 과제를 해결하기 위한 방법 중 한 가지다.

 

패턴

다양한 응용 소프트웨어 시스템들을 개발할 때 서로 간에 공통되는 설계 문제가 존재하는데, 각 해결책 사이에도 공통점이 있으며 이러한 유사점을 패턴이라고 한다.

 

개발자 간 원활한 의사소통, 소프트웨어 구조 파악 용이, 설계 변경에 대한 유연한 대처, 개발의 효율성, 유지보수성, 운용성 등 소프트웨어 품질 향상에 도움을 준다.

객체지향 프로그래밍 설계시 유사한 상황에서 구조적인 문제를 해결할 수 있도록 방안을 제공해 주며, Gof(Gang of Four; 교수 4명이 모여서 만든다. ) 분류가 가장 많이 사용된다.


2. 디자인 패턴을 사용할 때의 장.단점

장점

1. 개발자 간의 원활한 의사소통을 지원한다.

2. 소프트웨어 구조 파악이 쉽다.

3. 재사용을 통한 개발 시간을 단축할 수 있다.

4. 설계 변경 요청에 유연한 대처를 할 수 있다.

5. 객체지향 설계 및 구현의 생산성을 높이는 데 적합하다.

 

단점

1. 객체지향 설계/구현 위주로 사용된다.

2. 초기 투자 비용 부담이 된다.


3. 디자인 패턴의 구성 요소

필수 요소

1. 패턴의 이름

패턴을 부를 때 사용하는 이름과 패턴의 유형

 

2. 문제 및 배경

패턴이 사용되는 분야 또는 배경, 해결하는 문제를 의미

 

3. 해법

패턴을 이루는 요소들, 관계, 협동(Collaboration)과정

 

4. 결과

패턴을 사용하면 얻게 되는 이점이나 영향

 

추가요소

1. 알려진 사례

간단한 적용 사례

 

2. 샘플 코드

패턴이 적용된 원시 코드

 

3. 원리, 정당성, 근거 


GoF (Gangs of Four) 디자인 패턴

에릭 감마(Eric Gamma), 리처드 헬름(Richard Helm), 랄프 존슨(Ralph Johnson), 존 브리시데스(John Vissides)가 제안하였다.

 

객체지향 설계 단계 중 재사용에 관한 유용한 설계를 디자인 패턴화하였다.

생성 패턴(만들 때 사용), 구조 패턴(만든 것을 구조화), 행위 패턴(행위를 정의)으로 분류한다.

 

생성(Creational) 패턴

1. 팩토리 메서드 (Factory Methos : 공장 방법)

2. 싱글턴 (singleton : 개체)

3. 프로토타입 (Prototype : 시제품)

4. 빌더 (Builder : ..을 만드는)

5. 추상 팩토리 (Abstract Factory : 추상 공장)

 

구조(Structural) 패턴

인터페이스 담당 즉, 어떻게 하면 쉽게 연결할 수 있는지에 관함. 

1. 어댑터 (Adapter) : 연결장치

2. 브리지 (Bridge) : 다리 놓다

3. 컴퍼지트 (Composite) : 합성물

4. 데커레이터 (Decorator) : 실내장식가

5. 퍼사드 (Facade) : 표면

6. 플라이웨이트 (Flyweight) : 48-51kg 선수

7. 프록시 (Proxy) : 대리인 

 

행위(Behavioral) 패턴

어떤 행위를 갖게 할 것인지, 알고리즘이나 메소드에 관련됨. 

1. 책임 연쇄 (Chain of Responsibility : 연결 의 책무)

2. 이터레이터 (Iterator : 반복자)

3. 미디에이터 (Mediator : 중재자)
4. 커맨드 (Command : 명령하다)

5. 인터프리터 (Interpreter : 통역사)

6. 메멘토 (Memento : 기억하기위한 기념품)

7. 옵서버 (Observer : 목격자)

8. 스테이트 (State : 상태)

9. 스트래티지 (Strategy : 계획)

10. 비지터 (Visitor : 방문객) 

11. 템플릿 메서드 (Template Method : 견본 방법)


생성 패턴

객체를 생성하는 것과 관련된 패턴이다.

 

객체의 생성과 변경이 전체 시스템에 미치는 영향을 최소화하도록 만들어주어 유연성을 높일 수 있고 코드를 유지하기가 쉬운 편이다.

객체의 생성과 참조 과정을 추상화 함으로써 시스템을 개발할 때 부담을 덜어준다.

 

구성

1. Factory Method

- 상위 클래스에서 객체를 생성하는 인터페이스를 정의하고, 하위  클래스에서 인스턴스를 생성하도록 하는 방식이다.

- Virtual-Construtor 패턴이라고도 한다. 

예) 학교에 출석부가 객체다.

인스턴스 : 그날그날의 출석부

 

2. Singleton (독신의, 1개의 )

- 전역 변수를 사용하지 않고 객체를 하나만 생성하도록 한다.

- 생성된 객체를 어디에서든지 참조할 수 있도록 하는 패턴이다.

 

3. Prototype

- prototype을 먼저 생성하고 인스턴스를 복제하여 사용하는 구조이다.

- 일반적인 방법으로 객체를 생성한다.

- 비용이 많이 소요되는 경우 주로 사용한다.

 

4. Builder

작게 분리된 인스턴스를 조립하듯 조합하여 객체를 생성한다.

 

5. Abstraction Factor

- 구체적인 클래스에 의존하지 않고 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴이다.

- 관련된 서브 클래스를 그룹 지어 한 번에 교체할 수 있다.


구조 패턴

클래스나 객체를 조합해 더 큰 구조를 만드는 패턴이다.

복잡한 형태의 구조를 갖는 시스템을 개발하기 쉽게 만들어주는 패턴이다.

 

새로운 기능을 가진 복합 객체를 효과적으로 작성할 수 있다.

서로 다른 인터페이스를 지닌 2개의 객체를 묶어 단일 인터페이스를 제공하거나 객체들을 서로 묶어 새로운 기능을 제공하는 패턴이다. 프로그램 내의 자료 구조나 인터페이스 구조 등 구조를 설계하는데 많이 활용된다.

 

구성

1. Adapter

기존에 구현되어 있는 클래스에 기능 발생 시 기존 클래스를 재사용할 수 있도록 중간에서 맞춰주는 역할을 한다.

예 ) 집에 있는 어뎁터

중간에 전압을 맞춰주는 역할, 220v를 9v로 낮춰준다. 

 

2. Bridge

기능 클래스 계층과 구현 클래스 계층을 연결하고, 구현부에서 추상 계층을 분리하여 각자 독립적으로 변형할 수 있도록 해주는 패턴이다.

 

3. Composite

여러 개의 객체들로 구성된 복합 객체와 단일 객체를 클라이언트에서 구별 없이 다루게 해주는 패턴

 

4. Decorator

객체의 결합을 통해 기능을 동적으로 유연하게 확장할 수 있게 해주는 패턴 

 

5. Facade

"건물의 정면" 

- Facade 인터페이스를 제공하여 facade 객체를 통해서만 모든 관계가 이루어질 수 있도록 인터페이스를 단순화한다.

- 클래스 간의 의존관계가 줄고, 복잡성이 낮아진다.

 

6. Flyweight (경량)

"권투 선중의 플라이급(48~51 kg 선수)"

- 인스턴스를 매번 생성하지 않고 가능하다면 공유해 사용함으로써 메모리를 절약하는 패턴이다.

- 여러 개의 비슷한 객체 생성/조작 시 메모리를 효과적으로 사용할 수 있다.

 

7. Proxy (대리인)

- 접근 조절, 비용 절감, 복잡도 감소를 위해 접근이 어려운 객체와 연결하려는 다른 객체와 인터페이스 역할을 수행하는 패턴이다.

- 메모리가 대용량 객체로 접근할 수 있도록 하거나, 네트워크 연결에 사용한다.


행위 패턴

반복적으로 사용되는 객체들의 상호작용을 패턴화 한 것으로, 클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 방법을 정의한다.

메시지 교환과 관련된 것으로, 객체 간의 행위나 알고리즘 등과 관련된 패턴을 말한다.

 

구성

1. Chain of Responsibility 책임연쇄

- 요청을 처리할 수 있는 기회를 하나 이상의 객체에게 부여함으로써 요청하는 객체와 처리하는 객체 사이의 결합도를 없애려는 것이다.

- 요청을 해결할 객체를 만날 때까지 객체 고리(Chain)를 따라서 요청을 전달한다. 

 

2. Iterator 반복자

- 내부 표현 방법을 노출하지 않고 복합 객체의 원소를 순차적으로 접근할 수 있는 방법을 제공한다.

- 순차적으로 반복접근할 수 있도록

 

3. Mediator 중재자

- 객체 간의 통제와 지시의 역할을 하는 중재자를 두어 객체지향의 목표를 달성하게 해 준다.

- Proxy, Adapter와 차이점으로 Mediator는 강요할 수 있다. 

 

4. Command (명령)

요청을 객체로 캡슐화함으로써 서로 다른 요청으로 클라이언트를 파라미터화하고, 요청을 저장하거나 기록을 남겨서 오퍼레이션의 취소도 가능하게 한다.

 

5. Interpreter

- 언어에 따라서 문법에 대한 표현을 정의한다.

- 언어의 문장을 해석하기 위해 정의한 표현에 기반하여 분석기를 정의한다. 

 

6. Memento 비방록

캡슐화를 위배하지 않고 객체 내부 상태를 객체화하여, 나중에 객체가 이 상태로 복구 가능 하게 한다.

 

7. Observer 관찰자

객체 사이에 일 대 다의 종속성을 정의하고 한 객체의 상태가 변하면 종속된 다른 객체에 통보가 가고 자동으로 수정이 일어나게 한다.

 

8. State 상태

객체의 내부 상태에 따라 행위를 변경할 수 있게 한다. 이렇게 하면 객체는 마치 클래스를 바꾸는 것처럼 보인다.

 

9. Strategy (계획, 전략)

- 알고리즘군이 존재할 경우 각각의 알고리즘을 별도의 클래스로 캡슐화하고 이들을 상호교환 가능한 것으로 정의한다.

- 클라이언트에 영향을 주지 않고 독립적으로 알고리즘을 다양하게 변경할 수 있게 한다.

 

10. Visitor (방문객)

- 객체 구조의 요소들에 수행할 오퍼레이션을 표현한 패턴이다.

- 오퍼레이션이 처리할 요소의 클래스를 변경하지 않고도 새로운 오퍼레이션을 정의할 수 있게 한다.

 

11. Template method (임시방편)

- 오퍼레이션에는 알고리즘의 처리 과정만을 정의하고 각 단계에서 수행할 구체적 처리는 서브클래스에 정의한다.

- 알고리즘의 처리 과정은 변경하지 않고 알고리즘 각 단계의 처리를 서브클래스에서 재정의할 수 있게 한다. 


디자인 패턴 VS 아키텍처 패턴 

아키텍처 패턴이 상위 설계에 이용된다.

 

아키텍처 패턴

시스템 전체 구조를 설계하기 위한 참조 모델

 

디자인 패턴

서브 시스템 내 컴포넌트와 그들 간의 관계를 구성하기 위한 참조 모델


문제 풀이

1. 다음 내용이 설명하는 디자인 패턴은?

- 객체를 생성하기 위한 인터페이스를 정의하여 어떤 클래스가 인스턴스와 될 것인지는 서브 클래스가 결정하도록 하는 것

- virtual - Constructor 패턴이라고도 함

 

Factory Method 패턴

 

2. 디자인 패턴 사용의 장. 단점에 대한 설명으로 거리가 먼 것은?

① 소프트웨어 구조 파악이 용이하다.

② 객체지향 설계 및 구현의 생산성을 높이는데 적합하다.

③ 재사용을 위한 개발 시간이 단축된다.

④ 절차형 언어와 함께 이용될 때 효율이 극대화된다.

 

4번

객체지향형 언어와 함께 이용

 

3. Gof(Gangs of Four) 디자인 패턴 분류에 해당하지 않는 것은?

① 생성 패턴

② 구조 패턴

③ 행위 패턴

④ 추상 패턴

 

4번 

 

4. 디자인 패턴 중에서 행위적 패턴에 속하지 않는 것은?

① 커맨드 (Command) 패턴

② 옵서버 (Observer) 패턴

③ 프로토타입 (Prototype) 패턴

④ 상태(State) 패턴

 

3번 

 

5. 객체지향 소프트웨어 설계 시 디자인 패턴을 구성하는 요소로서 가장 거리가 먼 것은?

① 개발자 이름

② 문제 및 배경

③ 사례 

④ 샘플코드

 

1번

패턴 이름

 


 

728x90
반응형
LIST