컴퓨터공학/소프트웨어

[소프트웨어] 디자인 패턴

Harvie 2023. 7. 3. 08:00
반응형

디자인 패턴이란?

    - 아키텍처 설계 수준보다 낮은 수준의 설계 문제에 재사용 가능한 솔루션을 제공한다.

   

디자인 패턴의 혜택

  • 쉽게 재사용 가능하며 개발 시간 단축된다.
  • 소프트웨어 구조 파악이 용이하며 설계 관련 지식이 정리된다.
  • 개발자(설계자) 간의 의사소통이 원할해진다.
  • 객체지향 설계 원리를 잘 따르게 된다.

 

Gof 디자인 패턴

  • 여러 가지 문제에 대한 설계 사례를 분석하여 서로 비슷한 문제를 해결하기 위한 설계들을 분류하고, 각 문제 유형별로 가장 적합한 설계를 일반화해 패턴으로 정립한 것을 의미한다.
  • 소프트웨어 설계에 대한 지식이나 노하우가 문제 유형별로 잘 구체화되어 있을 뿐 아니라, 동일한 문제 유형에 대해서는 그 해결 방법에 대한 지식이나 노하우가 패턴 형태로 충분히 일반화된 것을 말한다.

생성 패턴

   - 특정 객체가 생성되거나 변경되어도 프로그램 구조에 영향을 크게 받지 않도록 유연성을 제공한다.

    - 객체 생성과 관련된 패턴들로 객체의 생성과 조합을 캡슐화

 

생성 패턴의 종류

  • factory method : 생성할 객체의 클래스를 서브 클래스로 분리해 객체를 생성
  • singleton : 한 클래스에 한 객체만 존재하도록 제한
  • prototype : 기존 객체를 복제함으로써 객체를 생성
  • builder : 생성과 구현을 분리해 복합 객체를 생성
  • abstract factory : 동일한 주제와 관련된 다른 객체들의 집합을 생성

 

구조 패턴

    - 프로그램 구조에 관련된 패턴들로 프로그램 내의 자료 구조나 인터페이스 구조 등 프로그램의 구조를 설계하는데 활용할 수 있는 패턴들

 

구조 패턴의 종류

  • composite : 여러 개의 객체들로 구성된 복합 객체와 단일 객체를 구별 없이 다루게 해주는 패턴
  • adapter : 인터페이스가 호환되지 않는 클래스들을 함께 이용할 수 있도록 중간에 맞춰주는 패턴
  • bridge : 추상화된 부분과 실제 구현 부분을 독립적으로 확장
  • decoration : 기존 객체에 동적으로 기능을 추가하거나 오버라이드
  • facade : 서브시스템에 있는 인터페이스 집합에 대하여 하나의 통합된 인터페이스를 제공
  • flyweight : 다수의 유사한 객체를 생성, 조작하는 비용을 절감
  • proxy : 실제 객체를 감싸고 추가 기능을 제공하면서도 실제 객체 접근을 통제

 

행동 패턴

     - 객체나 클래스 사이의 알고리즘이나 책임 분배에 관련된 패턴들로 반복적으로 사용되는 객체들의 상호작용을 패턴화

 

행동 패턴의 종류

  • iterator : 반복이 필요한 자료구조를 모두 동일한 인터페이스를 통해 순차적 접근을 제공
  • observer : 어떤 클래스에 변화가 일어났을 때, 이를 감지하여 다른 클래스에 통보
  • strategy : 알고리즘 군을 정의하고 각각 하나의 클래스로 캡슐화 한 다음 선택하여 적용
  • template method : 상위 클래스에서는 추상적으로 표현하고 그 구체적인 내용은 하위 클래스에서 결정
  • visitor : 각 클래스의 데이터 구조로부터 처리 기능을 분리하여 별도의 visitor 클래스로 만듦
  • chain of responsibility : 책임들이 연결되어 있어 내가 책임을 못 질 것 같으면 다음 책임자에게 자동으로 넘김
  • command : 요청된 명령어를 캡슐화하여 각 명령이 들어오면 그에 맞는 서브 클래스가 선택되어 실행하는 것
  • mediator : 클래스 간의 복잡한 상호작용을 캡슐화하여 한 클래스에 위임해서 중재 처리
  • state: 동일한 동작을 객체의 상태에 따라 다르게 처리해야 할 때 사용
  • memento : 클래스 설계 관점에서 객체의 정보를 저장 (undo 기능 유용)
  • interpreter : 간단한 언어의 문법을 정의하고 해석에 사용, 문법 규칙을 클래스화한 구조 (SQL,통신 프로토콜)

 

대표적인 패턴들의 추가적인 정보

싱글톤 패턴 - 생성 패턴

    - 특정 클래스의 객체가 오직 한 개만 존재하도록 보장

    - 객체를 강제적으로 하나만 생성하려는 목적  예) DB 커넥션을 위한 인터페이스

방법

  • 클래스 자체를 정적 변수로 한다.
  • 생성자는 private으로 선언한다.
  • 유일한 객체를 접근하는 정적 메서드

팩토리 메소드 패턴 - 생성 패턴

    - 클라이언트에서 사용할 클래스의 객체를 생성하는 책임을 분리하여 객체 생성에 변화를 대비

    - 팩토리 메소드를 포함하는 추상 클래스를 정의하고 하위 클래스에서 인스턴스를 생성하도록 하는 방식

 

추상 팩토리 패턴 - 생성 패턴

    - 구체적인 클래스를 지정하지 않고 관련성을 갖는 객체들의 집합을 생성

    - 객체를 사용할 클라이언트에서 구체적인 객체 생성을 지정하는 책임을 분리하기 위하여 추상 인터페이스를 이용하여 관련 객체 패밀리를 생성

 

어댑터 패턴 - 구조 패턴

    - 기존 클래스를 재사용할 수 있도록 중간에서 맞춰주는 역할

    - 사용 가능한 서비스 인터페이스를 클라이언트가 예상하는 인터페이스에 맞게 조정

    - 어댑터 : 서비스 제공 인터페이스를 클라이언트가 기대하는 인터페이스로 변환

 

데코레이션 패턴 - 구조 패턴

    - 집합 관계와 위임을 사용하여 기존 클래스의 기능을 동적으로 유연하게 확장

    - 수정에 의한 기능추가 : ocp 원리에 위배

    - 상속에 의한 추가 : 기능의 조합 수 만큼의 서브클래스가 필요

 

상태 패턴 - 행동 패턴

    - 상태에 따라 객체의 동작을 변경해야 하는 경우

    - 맥락과 상태를 별도 구현하여 융통성을 달성하기 위한 체계적이고 느슨한 결합 방식

 

옵서버 패턴 - 행동 패턴

    - 옵서버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵서버에게 통지

반응형