본문 바로가기
정보처리기사

디자인 패턴

by 두두리안 2022. 6. 24.
728x90

목차

1.디자인 패턴
2.생성(Creational)패턴
3.구조(Structural)패턴
4.행위(Behavioral)패턴

1.디자인 패턴

1-1. 디자인 패턴의 개념

* 문제를 해결하기 위한 설계패턴을 체계적으로 분류하여 소프트웨어 개발의 효율성과 재사용성을 높인것
* 반복적인 문제들의 해법들을 일반화하여 정리한 해결법
* 아키텍처는 모든 종류의 시스템에 적용할수 있지만, 디자인패턴은 일관된 문제에 적용
* 기능보다 구조,가독성,확장성에 비중을 둔다

1-2. Gof 디자인 패턴

* 23가지의 디자인 패턴을 정리하고 각각의 디자인 패턴 
* 5가지의 생성패턴 
* 7가지의 구조패턴 
* 11가지의 행위패턴

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

* 패턴의 이름과 구분
* 문제 및 배경
* 솔루션
* 사례
* 결과
* 샘플코드

1-4. 디자인 패턴의 장단점

1.장점
    * 개발자들 간의 원할한 의사소통이 가능
    * 소프트웨어 구조를 파악하기가 용이
    * 재사용성과 확장성이 좋아 개발 시간 단축
    * 설계변경에 대한 유연성과 이식성이 좋아진다
2.단점
    * 객체지향 개발위주로만 사용
    * 초기비용이 많이든다

2.디자인 패턴 - 생성(Creational)패턴

2-1. Abstract Factory

* 관련이 있는 서브 클래스를 묶어서 팩토리 클래스로 만들고, 이들조건에 따라 객체를 생성하는 패턴
* 객체 생성코드가 상위클래스에 존재하며, 하위 클래스가 객체를 받아 사용
* 같은 종류의 객체들을 일관된 방식으로 생성하는 경우 유용
* 여러개의 클래스를 하나의 묶어 한번에 교체할수 있는 패턴

2-2. Factory Method

* 객체를 생성하기 위한 인터페이스를 정의하여 어떤 클래스가 인스턴스화될 것인지 서브클래스가 결정하도록 하는 패턴
* 사용자의 입력값이나 조건이 다를 경우 조건에 맞는 다른객체를 생성할때 필요한 패턴
* 서브 클래스가 인스턴스를 결정하도록 책임의 위임하는 패턴

2-3. Builder

* 많은 인수를 가진 복잡한 객체를 단계적으로 생성하는 것에 초점을 두는 패턴
* 생산 단계를 캡슐화하여 구축공정을 동일하게 이용하도록 하는 패턴
* 객체의 생성에 있어 복잡한 과정들을 분리

2-4. Prototype

* 성능향상을 위해 기존 객체를 복사하여 중복개체를 생성하는 패턴
* 생성하는 객체가 동일하고 객체의 값이나 크기가 변하게 될때 유용하다
* 객체를 생성할때 드는 비용을 줄이기 위해 사용한다

2-5. Singleton

* 클래스가 오직 하나의 인스턴스만 가지도록 하는 패턴
* Private로 접근을 제한하고 Static으로 정적 변수를 선언

3.디자인 패턴 - 구조(Structural)패턴

3-1. Adapter

* 서로 다른 인터페이스로 인해 함께 사용하지 못하는 클래스를 함께 사용하도록 하는 패턴
* 이미 만들어져 있는 클래스를 인터페이스가 일치하지 않아 사용하지 못할때 적용

3-2. Bridge

* 하나의 계층에 복잡하게 존재하는 클래스들을 기능 클래스와 구현 클래스로 분리하여 두 클래스를 연결하는 패턴
* 기능과 구현을 분리하여 결합도를 낮추고, 필요한 부분을 독립적으로 추가할수 있다
* 상속은 견고한 연결, Bridge는 느슨한 연결

3-3. Composite

* 복합 객체와 단일 객체를 동일하게 취급하거나 다룰수 있는 패턴
* 트리 형태의 구조를 다룰때 유용

3-4. Decorator

* 소스를 변경하지 않고 독립적인 기능을 확장하도록 하는 패턴
* 객체에 부가적인 기능을 동적으로 추가할때 사용

3-5. Facade

* 복잡한 시스템을 구조화하여 쉽게 사용할수 있도록 하는 패턴
* 클라이언트와 복잡한 서스시스템 사이에 위치하여 단순화된 하나의 인터페이스를 제공한다
* 클래스 간의 의존관계가 줄어들고 복잡성이 낮아진다

3-6. Flyweight

* 대량의 유사한 작은 객체들을 공유하여 메모리를 가볍게 유지시키는데 유용하다
* 자주 사용하는 같은 데이터나 코드를 중복 생성하지 않도록 관리하는 저장소를 만들어 필요할때마다 불러와 사용할수 있도록 한다

3-7. Proxy

* 다른 객체로 접근하는 것을 통제하기 위해서 그 객체의 대리자를 제공하는 패턴
* 다른 객체에 접근하기 위해 본인 객체는 은닉하고 대리인 객체를 두고자 하는 경우
* 한정된 자원을 가지고 서비스 요청이 폭주하는 시간에도 안정되고 빠르게 유지하기 위한 웹툰 서비스등에 이용

4.디자인 패턴 - 행위(Behavioral)패턴

4-1. Chain of Responsibility

* 문제의 처리를 담당하는 여러개의 처리기능을 두고 순서대로 처리해 나가는 패턴
* 문제를 처리하는 객체들끼리 연결고리를 만들어, 실제 문제를 처리하는 객체를 만날때까지 계속 요청을 내부적으로 전달
* 객체들 간의 결합도를 없애기 위한 패턴
* 객체의 위치를 파악하기 힘든경우에 유용

4-2. Command

* 요청 자체를 객체화하여 클라이언트에 매개변수로 넘길수 있게 하기 위한 패턴
* 여러기능을 실행할수 있도록 재사용성이 높은 클래스를 설계하는 패턴
* 실행취소에 필요한 상태저장, 로그기록, 명령어 조합을 가능하게 하고, Composite 패턴을 이용하여 여러 명령어의 구성이 가능

4-3. Interpreter

* 간단한 언어의 문법을 정의, 문장을 구성, 문장을 해석하는 방법을 제시하는 패턴
* 매개변수를 사용하여 여러가지 다른 요구사항을 처리할수 있다

4-4. Iterator

* 내부 데이터 구조를 노출하지 않고 어떤 객체 집합에 속한 원소들을 순차적으로 접근할수 있도록 하는 패턴
* 복합객체의 내부표현은 보여주지 않고 순회하여, 원하는 데이터를 찾아갈수 있게 해준다

4-5. Mediator

* 여러 객체 간의 통신 복잡성을 줄이기 위해 사용되는 패턴
* 복잡한 상호작용 관계를 단순화 시킬수 있다
* 서로 다른 클래스간의 모든 통신을 처리하고, 약한결합으로 코드를 쉽게 유지 관리할수있는 중재자 클래스 제공    

4-6. Memento

* 객체의 상태를 저장해 두었다가 복원해야할 경우 사용하는 패턴
* 캡슐화의 원칙을 지키면서 객체의 내부상태를 파악하고, 객체의 상태를 저장해둔 상태로 다시 복구할수있게 한다
* 상태만을 따로 저장하여 작업취소를 가능하게 해주지만, 이전의 상태값을 보관해야 오버헤드가 발생한다는 단점을 가짐

4-7. Observer

* 1대다 관계의 오브젝트에 대해 감시하고 있다가 특정 객체의 상태가 변하면 다른 모든 객체에게 그 사항을 알리고, 필요한 경우 자동적으로 수정이 이루어지는 패턴
* 특정 클래스에 변화가 일어 났을때, 이를 감지하고 다른클래스에 통보

4-8. State

* 객체 자신의 내부 상태에 따라 기능을 변경하도록 하는 패턴
* 특정 메소드가 객체의 상태에 따라 다른 기능을 수행한다

4-9. Strategy

* 클래스별로 캡슐화되어 있는 객체들을 상호교환이 가능하도록 하는 패턴
* 다형성을 이용하여 특정 객체에 종속되지 않으면서 알고리즘에 대한 확장, 변형이 용이
* 상황에 맞게 기능을 변경하고 싶을때 유용

4-10. Template Method

* 알고리즘에 대한 골격을 정의하고, 구체적인 단계는 서브 클래스에서 정의하는 패턴
* 고정적 기능은 부모 클래스에 정의하고, 변경되는 기능은 서브클래스에서 정의하도록 한다
* 기본 개념은 상속관계와 오버라이딩을 활용한 재정의이며, 알고리즘 기본골격 재사용과 상세 구현 변경이 핵심

4-11. Vistor

* 기존 클래스를 수정하지 않고도 새로운 기능을 추가 가능하게 하는 패턴
* 멤버 변수와 멤버 메소드를 다른 클래스로 분리하여 서로간 호출하게 한다
* 다양한 작업의 효율적인 추가와 변경이 가능하도록, 작업대상과 작업항목을 분리하여 정의

참고자료 : 이기적 환상콤비 정보처리기사

728x90

'정보처리기사' 카테고리의 다른 글

탐색  (0) 2022.06.25
자료구조  (0) 2022.06.24
소프트웨어 아키텍처  (0) 2022.06.23
모듈의 성능 평가  (0) 2022.06.23
공통모듈  (0) 2022.06.22