디자인패턴은 다양한 프로그래밍 언어에서도 사용할 수 있는 기법입니다.

평소 프로그래머가 되기위해 학습을 하시는분들은 동영상이나 책 등에서의 예시를 보면 [각각의 DB에 접근하기 위해 커넥션에 대한 설정을 전략패턴을 사용하여 높은 응집도와 낮은결합성, 그리고 유지보수성을 향상시킨다.] 등의 디자인패턴이 주제가되는 등 다양한 방법으로 활용됩니다.

그렇다면, 디자인패턴의 정의 와 특징, 그리고 디자인패턴을 사용함으로써 생기는 장단점들에 대해 알아보겠습니다.

 

디자인 패턴이란?

정의

객체지향의 특징과 원칙을 기반으로 특정상황에서 문제를 해결할 수 있는 재사용 가능한 기법입니다.

 

소프트웨어 설계시에 특정상황에서 자주 만나는 문제를 해결하기위해 사용할 수 있는 재사용 가능한 솔루션으로써, 디자인패턴의 종류를 명시함으로써 설계의 의도와 해결책을 함께 설명할 수 있다.

또한, 객체지향의 4가지 특징과 5개의 원칙을 사용하여 높은 응집도, 낮은 결합성, 재사용성 및 유지보수능력이 향상된다.

 

 

특징

디자인 패턴들의 공통된 특징들은 다음과 같습니다.

  • 디자인 패턴을 사용하여 코딩시의 재사용성 및 유지보수성 증가한다.
  • 3가지(생성,구조,행위)로 나뉘어진 패턴 유형으로 존재한다.
  • 정의된 디자인 패턴을 명명하여 보다 원활한 의사소통 기능 제공한다.
  • 하나의 패턴에는 4가지의 요소*(패턴 이름, 문제, 해법, 결과)를 가지고 있다.

패턴 이름 : 디자인 패턴의 이름 한두 단어로 설계의 의도, 문제와 해법을 서술한다.

문제 : 언제 패턴을 사용하는가를 서술하며, 문제를 제시함으로써 패턴을 적용하는 것이 의미있는 사례를 정의한다.

해법 : 설계를 구성하는 요소들과 그 요소들 간의 관계 책임 그리고 협력 관계를 서술한다.

결과 : 디자인 패턴을 적용해서 얻는 결과와 장단점을 서술한다.

 

장점

  • 서로 다른 언어를 사용하더라도 디자인 패턴을 제시함으로써 특정 언어에 한정되지 않고 일반화된 솔루션을 제공할 수 있다.
  • 협업시의 개발자간 의사소통시 해결 솔루션을 특정 단어를 사용하여 원활한 의사소통이 가능하다.
  • 디자인 패턴을 명확하게 인지할 시 소프트웨어 구조 파악에 용이하다.

단점 

  • 초기 설계단계에서 기존의 코드보다 더 길어지며, 데이터의 기존 처리속도가 비교적 느릴 수 있다.
  • 설계할시 초기 난이도가 더 높다.

 

디자인 패턴의 종류와 3가지 유형

생성 (Creational Patterns) 구조 (Structural Patterns) 행동 (Behavioral Patterns)
싱글 톤(SingleTon) 어댑터(Adapter) 스트레티지(Strategy)
팩토리 메서드(Factory Methods) 브릿지(Bridge) 템플릿 메서드(Template Methods)
추상 팩토리(Abstract Factory Methods) 컴포지트(Composite) 옵저버(Observer)
빌더(Builder) 데코레이터(Decorator) 스테이트(State)
프로토타입(Prototype) 퍼사드(Facade) 비지터(Visitor)
  플라이웨이트(FlyWeight) 커맨드(Command)
  프록시(Proxy) 인터프리터(Interpreter)
    이터레이터(Iterator)
    미디에이터(Mediator)
    메멘토(Memonto)
    책임 연쇄(Chain of Responsibility)

디자인 패턴은 GoF(Gang of Four)의 디자인 패턴에서 불리우며, 4명의 개발자가 최초로 집대한 책에서 시작된 종류 및 유형이 있습니다.

 

 

 

1. 생성 패턴 (Creational Patterns)

생성 패턴은 객체의 인스턴스를 생성하는 방법과 관련된 패턴들이 있습니다.

주로 객체 생성의 복잡성을 줄이고, 인스턴스 과정을 보다 유연성있게 다루는 방법을 제공하는 유형입니다.

즉, 생성 패턴을 사용함으로써 생기는 주요 장점으로는 유연성 및 재사용성을 증가할 수 있습니다.

 

생성 패턴의 주요 특징으로는 시스템이 어떤 구체 클래스를 사용하는지에 대한 정보를 캡슐화 하며, 클래스의 인스턴스들이 어떻게 만들고 어떻게 서로 연관되어있는지의 정보은닉화를 제공합니다.

 

 

생성 패턴은 클래스 생성 패턴과 객체 생성 패턴으로 구분할 수 있습니다.

  • 클래스 생성 패턴 : 인스턴스로 만들 클래스를 다양하게 만들기 위한 용도로 상속을 사용한다.
  • 객체 생성 패턴 : 인스턴스화 작업을 다른 객체에게 넘긴다.

 

2. 구조 패턴 (Structural Patterns)

구조 패턴은 클래스나 객체를 조합하여 더 큰 구조를 형성하는 방법으로써 구조 패턴의 디자인 패턴을 사용하여 기존의 적용 전 기본 구조보다 효율성과 유연성을 개선합니다.

즉, 코드 확장성 및 유지보수 용이성, 재사용성에 중점을 두고 있습니다..

 

구조패턴의 주요 특징으로는 서로 독립적으로 개발한 클래스 라이브러리를 하나인 것처럼 바인딩을 할 수 있습니다.

또한 여러 인터페이스를 합성하여 서로 다른 인터페이스의 통일된 추상화를 제공하며, 인터페이스나 구현을 복합하는게 아닌 객체를 합성하는 방법을 제공합니다.

 

 

3. 행동 패턴 (Behavioral Patterns)

행동 패턴은 객체나 클래스 간의 협력 방법을 다룹니다. 해당 패턴을 사용함으로써 한 객체가 수행할 수 없는 작업을 여러개의 객체로 분배하여 사용하여 높은 응집도 및 낮은 결합성을 유지하는데 중점을 두고 있습니다.

 

즉, 행동 패턴을 사용하여 객체 간의 제어 구조가 아닌 객체들을 어떻게 연결할 것인지에 대한 것에 중점을 둠으로써 높은 응집도 및 낮은 결합성을 유지하는데 도움을 주는 디자인 패턴입니다.

 


정리

 

디자인 패턴은 소프트 웨어 설계시에 생기는 문제들을 해결하기위해 사용하는 재사용 가능한 솔루션이다.

디자인 패턴은 4가지의 요소를 중점으로 고안되었으며, 디자인 패턴은 3가지의 유형으로 나뉠 수 있다.

각각의 디자인 패턴을 사용함으로써 얻을 수 있는 장점으로는 코드의 유지보수 및 확장성, 유연성 증가 등이 있다.

 

예시) 템플릿 메서드 패턴을 통하여 공통적인 부분을 상위 클래스에서 높은 응집도를 나타냄으로써, 기존의 적용 전 코드보다 상대적으로 적은 코드로 인한 빌드 시간을 단축시킬 수 있다. 빌드시간이 단축되었다는건 처리시간을 보다 효율적으로 나타내었으며 즉 프로그램의 유지보수성을 향상시켰다고 볼 수 있다.

+ Recent posts