디자인 패턴이란
디자인 패턴의 저명한 인사들이 내린 정의로, 소프트웨어를 설계할 때 자주 사용되는 패턴을 정형화한 것 이라고 할 수 있다.
GoF : 특정한 상황에서 일반적 설계문제를 해결하기 위해 상호교류하는 수정 가능한 객체와 클래스들에 대한 설명.
라만(C. Larman) : 숙련된 객체지향 개발자 및 기타 소프트웨어 개발자는 소프트웨어 개발의 가이드라인이 되는 일반적인 원칙들과 관용적인 해결책들의 레퍼토리(repertorie)를 구축한다. 패턴은 이러한 원칙들과 관용적 해결책들이 문제와 해결책을 기술하는 구조적인 형태로 체계화되고 명명된 것.
GoF의 디자인 패턴에서는 객체지향 디자인 패턴을 생성 패턴(Creational Patterns), 구조 패턴(Structural Patterns), 행동 패턴(Behavioral Patterns)으로 구분하고 있다.
디자인 패턴 장점
- 특정 문제에 대해 공통으로 알고 있는 패턴을 이용하여 해결책을 논의할 수 있기때문에 원활한 의사소통에 도움이 된다.
- 디자인 패턴 특성을 잘 알고있으면 소프트웨어 전체구조를 쉽게 파악할 수 있다.
- 이미 만들어진 디자인 패턴을 사용하므로 재사용을 통해 개발 시간 단축을 할 수 있다.
디자인 패턴 단점
- 초기 비용이 많이 들어간다.
생성 패턴(Creational Patterns)
객체 생성 매커니즘을 다루고 상황에 적절한 객체를 만드는 패턴이다.
Abstract Factory
구체적인 클래스에 의존하지 않고 서로 관련있는 객체들의 조합을 생성하는 패턴으로 객체 생성을 캡슐화 한다.
캡슐화하기 때문에 객체간의 느슨한 결합 관계를 만들고 특정 구현에 의존하지 않는 설계를 할 수 있다는 장점이 있다.
Builder
생성 인자가 많을 경우에 빌더 객체를 통해 구체적인 객체를 생성하는 패턴으로 객체 생성에 필요한 파라미터 의미를 명확히 할 수 있으며 생성에 필요한 파라미터가 추가될 때 마다 생성자 오버로딩을 하지 않아도 된다는 장점이 있다.
Factory
객체를 생성하는 인터페이스를 정의하지만, 인스턴스를 만들 클래스의 결정은 서브클래스가 하는 패턴으로 객체들을 한 곳에서 관리할 수 있고 객체의 생명주기를 관리하기 쉬워진다는 장점이 있다.
Prototype
생성할 객체들의 타입이 프로토타입인 인스턴스로부터 결정되도록 하는 패턴으로 인스턴스는 새 객체를 만들기 위해 자신을 복제하게 되는데, 복제만 해서 객체를 생성하게 되므로 서브클래스의 수를 줄일 수 있다는 장점이 있다.
Singleton
객체를 하나만 생성하도록 하는 패턴으로, 오직 하나의 인스턴스만 생성되기때문에 메모리를 줄일 수 있고 두번째 호출부터는 객체 로딩 시간이 줄어 성능 향상의 장점이 있다.
구조 패턴(Structural Patterns)
프로그램의 효율적인 구조를 형성하기위해 클래스와 객체를 어떻게 합성하는가에 관련한 패턴이다.
클래스 기반 구조화는 Adapter패턴 상속을 사용하고, 객체 기반 구조화는 Adapter패턴을 제외한 패턴을 사용하면된다.
Adapter
클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로, 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 같이 작동할 수 있도록 해주는 장점이 있다.
Bridge
구현부에서 추상층을 분리하여 각자 독립적으로 변형 및 확장 가능하도록 하는 패턴으로, 추상화와 구현 모두 독립적으로 다른 계층 구조를 가지면서 클라이언트 응용프로그램에서 구현을 숨길 수 있다는 장점이 있다.
Composite
객체들의 집합을 동일 객체 타입의 한 인스턴스로 표현한 패턴으로 클라이언트가 개별적 객체와 복합 객체 모두 동일하게 다룰수 있도록 하는 장점이 있다.
Decorator
주어진 상황에 따라 어떤 객체에 책임을 덧붙이는 패턴으로 기능의 유연한 확장을 위해 상속 대신 사용할 수 있다는 장점이 있다.
Facade
복잡한 구조 코드에 대한 간략화된 인터페이스를 제공하는 패턴으로 많은 분량의 코드에 접근할 수 있는 단순한 인터페이스를 제공한다는 장점이 있다.
Flyweight
동일하거나 유사한 객체들 사이에 가능한 많은 데이터를 서로 공유하여 사용하도록하는 패턴으로, 메모리 사용량을 최소화할 수 있다는 장점이 있다.
Proxy
다른 무언가를 해주는 인터페이스를 제공하는 패턴으로 어떤 클래스에 접근해 주요 기능이 수행되기전에 전처리 단계를 수행해주는 구조를 짤 수 있다는 장점이 있다.
행동 패턴(Behavioral Patterns)
테스크의 처리를 어떤 객체가 할 것인지에 대해 다루는 패턴이다.
Chaing of Responsibility
요청을 처리할 수 있는 기회를 하나 이상의 객체에게 부여함으로써 요청하는 객체와 처리하는 객체 사이의 결합도를 없애려는 패턴으로 요청을 해결할 객체를 만날 때가지 객체 고리를 따라서 요청을 전달한다.
Command
요청을 객체로 객슐화하는 패턴으로, 서로 다른 요청으로 클라이언트를 파라미터화 하고 요청을 저장하거나 기록을 남겨서 오퍼레이션의 취소도 가능하게 하는 장점이 있다.
Interpreter
언어에 따라 문법에 대한 표현을 정의하는 패턴으로, 언어의 문장을 해석하기 위해 정의한 표현에 기반하여 정의하기 때문에 문법의 추가 / 수정 / 구현이 쉬워진다는 장점이 있다.
Iterator
내부 표현 방법을 노출하지 않고 복합 객체의 원소를 순차적으로 접근할 수 있는 패턴으로 변수를 추상화할 수 있다는 장점이 있다.
Mediator
객체들 간의 상호작용을 객체로 캡슐화하는 패턴으로 객체들 간의 참조 관계를 객체에서 분리함으로써 상호작용만을 독립적으로 다양하게 확대할 수 있다는 장점이 있다.
Memento
캡슐화를 위배하지 않고 객체 내부 상태를 객체화는 패턴으로 나중에 객체가 이 상태로 복구 가능하게 하는 장점이 있다.
Observer
객체 사이에 일 대 다의 종속성을 정의하고 한 객체의 상태가 변하면 종속된 다른 객체에 통보가 가고 자동으로 수정이 일어나게 하는 패턴으로 객체의 의존성을 제거할 수 있다는 장점이 있다.
State
객체의 내부 상태에 따라 행위를 변경할 수 있게하는 패턴으로 객체는 마치 클래스를 바꾸는 것처럼 보이며 하나의 객체에 대해 여러 동작을 구현할 때 상체 객체만 수정하므로 동작의 추가 / 수정 / 삭제가 간단해진다는 장점이 있다.
Strategy
알고리즘군이 존재할 경우 각각의 알고리즘을 별도의 클래스로 캡슐화하고 이들을 상호 교환 가능하도록 하는 패턴으로 클라이언트에 영향을 주지 않고 독립적으로 알고리즘을 다양하게 변경할 수 있다는 장점이 있다.
Template Method
오퍼레이션에는 알고리즘의 처리 과정만을 정의하고 각 단계에서 수행할 구체적 처리는 서브클래스에 정의하도록 하는 패턴으로 알고리즘의 처리 과정은 변경하지 않고 알고리즘 각 단계의 처리를 서브클래스에서 재정의할 수 있어 의존 역전 원칙에 따라 구체적인 것이 아니라 추성적인 것에 의존하는 설계를 할 수 있다는 장점이 있다.
Visitor
객체 구조의 요소들에 수행할 오퍼레이션을 표현한 패턴으로 구현에 필요한 자료구조를 원본 데이터와 분리시켜주는 장점이 있다.
'개발 > Etc' 카테고리의 다른 글
UUID type3, UUID type4 (JAVA) (0) | 2021.08.24 |
---|---|
[Design Pattern] Bridge Pattern (0) | 2021.08.11 |
[Design Pattern] Observer Pattern (0) | 2021.08.11 |
[Design Pattern] Prototype Pattern (0) | 2021.08.07 |