본문 바로가기
Study/디자인패턴

디자인 패턴 (Design Pattern)

by 코딩여걸 2022. 8. 11.
728x90

🤔 디자인 패턴이란?

  • 효율적인 코드를 만들기 위한 방법론
  • 라이브러리나 프레임워크가 도와주지 못하는 부분을 도와주는 것

 

  • 상황에 맞는 올바른 설계를 더 빠르게 적용할 수 있다.
  • 각 패턴의 장단점을 통해서 설계를 선택하는데 도움을 얻을 수 있다.
  • 설계 패턴에 이름을 붙임으로써 시스템의 문서화, 이해, 유지 보수에 도움을 얻을 수 있다.

 

😊 디자인 패턴 사용 목적 및 이유

1. 우리 주변에서 자주 반복해서 발생하는 문제와 그 문제를 해결하는 핵심을 기술하여 동일한 일을 두 번 다시 하지 않고 해결할 수 있도록 한다.
2. 구체적인 설명없이 구조화된 패턴에 대한 사전 지식으로 개발자 간의 커뮤니케이션이 원할해질 수 있다.
3. 이미 검증된 구조를 사용하므로 설계 과정의 속도를 높일 수 있다.

 

🙂 디자인 패턴의 장점

  • 개발자 간의 원활한 의사소통
    • 여러 디자인 패턴의 특성을 잘 알고 있어 문제 해결 시 어떤 디자인 패턴을 사용하면 좋을지 해결책을 논의할 수 있다.
  • 소프트웨어 구조 파악 용이
    • 디자인 패턴의 특성을 잘 알고 있기에 어떤 디자인 패턴이 설계할 때 사용되었는지 알면 소프트웨어 전체 구조를 쉽게 파악 가능하다.
  • 재사용을 통한 개발 시간 단축
    • 이미 만들어 놓은 디자인 패턴을 사용하므로 개발시간을 단축시킬 수 있다.
  • 설계 변경 요청에 대한 유연한 대처
    • 사용자의 지속적인 추가 요청, 환경 변화 등의 설계 변경 요청에 쉽고 빠르게 대처 가능하다.

 

🙁 디자인 패턴의 단점

  • 객체지향 설계/구현 위주로 사용됨
    • 디자인 패턴은 객체지향 설계/구현에 많이 사용되는데, C언어를 주로 사용하는 구조적 설계/구현에서도 사용할 수 있지만 너무 복잡해서 큰 도움이 되지 않는다.
  • 초기 투자 비용 부담
    • 디자인 패턴을 적용 및 설계하면 디자인 패턴을 사용하지 않은 경우보다 초기에 시간과 노력이 많이 든다.

 

🧩 디자인 패턴 구조

  • 컨텍스트(context)
    • 패턴이 적용되는 상황
      • 반복적으로 일어날 수 있는 상황이어야만 함
        • ex) 객체들의 컬렉션이 주어져 있음
    • 문제가 발생하는 여러 상황을 기술한다. → 패턴이 적용될 수 있는 상황을 나타낸다.
    • 경우에 따라서는 패턴이 유용하지 못한 상황을 나타내기도 한다.
  • 문제(problem)
    • 컨텍스트 내에서 이뤄야 하는 목표
      • 컨텍스트 내의 제약조건도 포함됨
        • ex) 컬렉션의 구현을 드러내지 않으면서 그 안에 있는 각 객체를 대상으로 순환 작업을 할 수 있어야 함
    • 패턴이 적용되어 해결될 필요가 있는 여러 디자인 이슈들을 기술한다.
    • 이때 여러 제약 사항과 영향력도 문제 해결을 위해 고려해야 한다.
  • 해결(solution)
    • 우리가 찾아내야 하는 것
      • 제약조건 속에서 누가 적용해도 목표를 이룰 수 있는 일반적인 디자인
        • ex) 반복 작업을 별도의 클래스로 캡슐화함
    • 문제를 해결하도록 설계를 구성하는 요소들과 그 요소들 사이의 관계, 책임, 협력 관계를 기술한다.
    • 해결은 반드시 구체적인 구현 방법이나 언어에 의존적이지 않으며 다양한 상황에 적용할 수 있는 일종의 템플릿이다.
문제 : 어떻게 회사에 제시간에 도착할 것인가?
컨텍스트 : 차에 자동차 열쇠를 두고 나왔는데 문이 잠겼다
해결책 : 유리를 깬다. 차에 들어간다. 차를 몰고 출근한다.

 


 

https://java-coding.tistory.com/54

 

GoF (Gang of Four) 디자인 패턴

GoF (Gang of Four)는 Design Patterns: Elements of Reusable Object-Oriented Software를 집필한 저자 에릭 감마(Erich Gamma), 리차드 헬름(Richard Helm), 랄프 존슨(Ralph Johnson), 존 블리시데스(John Vlis..

java-coding.tistory.com

 

728x90

'Study > 디자인패턴' 카테고리의 다른 글

행위 패턴(Behavioral Pattern)  (0) 2022.08.11
구조 패턴(Structural Pattern)  (0) 2022.08.11
생성 패턴(Creational Pattern)  (0) 2022.08.11
GoF (Gang of Four) 디자인 패턴  (0) 2022.08.11

댓글