본문 바로가기

안녕하세요!

자격증 준비/정보처리기사

[ 정보처리기사 ] 디자인 패턴

디자인 패턴


 

디자인 패턴은 크게 생성 패턴, 구조 패턴, 행위 패턴으로 나눌 수 있다.

※ 제목 우측의 영어 대문자는 용어 앞글자를 따서 외우기 쉽게 하기 위해 나름대로 적어놓은 것이다.

 

생성패턴 A B F P S


 

Builder는 복잡한 Instance를 조립해 만드는 구조이다.
복합 객체를 생성할 때 객체를 생성과 구현을 분리함으로써 동일한 생성 절차에서 서로 다른 표현 결과를 생성한다.

Prototype은 처음부터 일반적인 원형을 만들어 놓고, 그것을 복제한 후 필요한 부분만 수정해 사용한다.
생성할 객체의 원형을 제공하는 Instance에서 생성할 객체들의 Type이 결정되도록 설정한다. 

Factory Method상위 Class에서 객체를 생성하는 Interface를 정의하고, 하위 Class에서 Instance를 생성한다.
상위 Class에서는 Instance를 만드는 방법만 결정하고,
하위 Class에서 그 Data의 생성을 책임지고 조작하는 함수들을 Overriding하여
Interface와 실제 객체를 생성하는 Class를 분리한다.

Abstract Factory는 구체적인 Class에 의존하지 않고
서로 연관되거나 의존적인 객체들의 조합을 만드는 Interface(API)를 제공한다.
구체적인 구현은 Concrete Product Class에서 이루어지며 동일한 주제의 각기 다른 Factory의 묶음이라고 보면 된다.

Singleton전역 변수를 사용하지않고 객체를 하나만 생성하며, 생성된 객체를 어디에서든지 참조할 수 있도록 한다.
반면 한 클래스에 한 객체만 존재하도록 제한한다.  

 

구조 패턴 A B C D F F P


 

Bridge기능과 구현 Class 계층을 연결한다.
구현부에서 추상 계층을 분리해 추상화된 부분과 실제 구현 부분을 독립적으로 확장한다.
또한 구현뿐만 아니라, 추상화된 부분까지 변경해야 하는 경우에 활용한다. 

Decorator 기존에 구현돼 있는 Class에 필요한 기능을 추가해 나가는 설계 Pattern이다.
기능 확장이 필요할 때 기존 객체 간의 결합을 통해 기능을 동적으로 유연하게 확장하여 상속 대안으로 사용한다.

Facade복잡한 시스템에 대해 통합된 Interface를 제공함으로써 User와 System 간이나
여타 다른 System과의 결합도를 낮춰 System 구조에 대한 파악이 용이하다.
또한 시스템 구조에 대한 파악이 용이하며 User 측면에서 단순한 Interface 제공을 통해 접근성을 제고한다.

Flyweight다수의 객체로 생성될 경우 모두가 갖는 본질적 요소 Class와 공유함으로써 메모리를 절약한다.
즉, Class의 경량화를 이뤄내면서 여러 개의 Virtual Instance를 제공해 메모리를 절감하는 것이다. 

Composite객체들 관계를 트리 구조로 구성해 부분-전체 계층을 표현한다.
사용자가 단일 객체와 복합 객체 모두 동일하게 취급하게 된다.

Proxy는 실제 객체에 대한 대리 객체를 의미한다.
실제 객체 접근 이전에 필요한 행동을 취할 수 있게 만들어 미리 할당하지 않아도 상관없는 것들을
실제 이용할 때 할당하게 하여 메모리 용량을 절약한다.
실제 객체를 드러나지 않게 함으로써 정보은닉 역할을 수행하는 것이다.

Adapter기존에 생성된 Class를 재사용하도록 중간에서 맞춰주는 역할을 하는 Interface를 생성한다.
상속 이용하는 Class Pattern과 위임을 이용하는 Interface Pattern 두 가지 형태로 사용한다.
Interface가 호환되지 않는 Class들을 함께 이용할 수 있도록 다른 Class Interface에 덧씌우는 것이다.

 

행위 패턴 C C M M I I S S T V O


 

Mediator는 객체지향 설계에서 객체의 수가 너무 많아지면 서로 간의 통신이 복잡해져 객체지향에서 가장 중요한 느슨한 결합의 특성을 해칠 수 있기 때문에 이를 해결하는 방법으로 사용한다.
중간에 이를 통제하고 지시할 수 있는 역할을 하는 중재자를 두고, 중재자에게 모든 것을 요구해 통신의빈도 수를 줄여 객체지향 목표를 달성하는 것이다. 
이로써 상호작용의 유연한 변경을 지원하게 된다.

Interpreter는 언어의 다양한 해석, 구체적으로 구문을 나누고 그 분리된 구문의 해석을 맡는 Class를 각각 작성해 여러 형태의 언어 구문을 해석한다.
이로써 문법 자체를 Capsulization하여 사용하게 된다.

Iterator는 Collection 구현 방법을 노출시키지 않으면서 그 집합체 안에 들어 있는 모든 항목에 접근할 방법을 제공한다. 
즉 내부 구조를 노출하지 않고 복잡한 객체의 원소를 순차적으로 접근 가능하게 해주는 것이다.

Template Method는 어떤 작업을 처리하는 일부분을 Sub Class로 Capsulization하여 전체 일을 수행하는 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내역을 바꾸는 Pattern이다.
상위 Class(Abstract Class)에는 Abstract Method를 통해 기능의 골격을 제공하고
하위 Class(Concrete Class)의 Method에는 세부적인 처리를 구체화하는 방식을 사용한다.
즉 상위 작업의 구조를 바꾸지 않으면서 Sub Class로 작업의 일부분을 수행하는 것이다.
이는 코드 양을 줄이고 유지보수를 용이하게 해준다.
 
Observer는 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들에 연락이 가고 자동으로 내용을 갱신한다.
일 대 다의 의존성을 가지며 상호작용하는 객체 사이에서는 가능하면 느슨하게 결합시킨다.
객체의 상태 변화에 따라 다른 객체의 상태도 연동된다.

State는 객체 상태를 Capsulization함으로써 그것을 참조하게 하는 방식이다.
상태에 따라 다르게 처리할 수 있도록 행위 내용을 변경해,
변경 시 원시코드의 수정을 최소화하고 유지보수의 편의성을 제고할 수 있게 된다.

Visitor는 각 Class Data 구조로부터 처리 기능을 분리해 별도의 Class를 만들어 놓고
해당 Class의 Method가 각 Class를 돌아다니며 특정 작업을 수행한다.
객체의 구조는 변경하지 않으면서 기능만 따로 추가하거나 확장할 때 사용한다. 

Command는 실행될 기능 및 요구사항을 Capsulization하여
주어진 여러 기능을 실행할 수 있는 재사용성이 높은 Class를 설계한다.
하나의 Abstract Class에 Method를 만들어 각 명령이 들어오면 그에 맞는 Sub Class가 선택되어 실행된다. 

Strategy는 알고리즘 군을 정의하고 같은 알고리즘을 각각 하나의 Class로 Capsulization한 다음,
필요할 때 서로 교환해서 사용한다.

Memento는 Class 설계 관점에서 객체의 정보를 저장할 필요가 있을 때 적용한다.
Undo 기능을 개발할 때 사용한다.

Chain of Responsibility는 정적으로 어떤 기능에 대한 처리의 연결이 하드코딩되어 있을 때
기능 처리의 연결 변이가 불가능하지만 이를 동적으로 연결시켜 경우에 따라 다르게 처리할 수 있도록 연결한다.

반응형

 

728x90
반응형

loading