본문 바로가기
Engineering/SW Design

디자인 패턴 개요

by 쿨쥰 2023. 5. 19.

디자인 패턴 이란? 


 

디자인 패턴

SW 설계 과정에서 자주 발생하는 문제들에 대한 전형적인 해결책이다.

이는 코드에서 반복되는 디자인 문제들을 해결하기 위해 미리 만들어진 코드의 붕어빵 틀과 같은 frame을 제공한다.

다만, 디자인 패턴은 단지 frame 에 불과하며, skeleton code를 표준화된 라이브러리나 함수처럼 그대로 패턴 형태를 복붙 해넣는 형태로는 사용할 수 없다.

패턴은 재사용 할 수 있는 코드 조각이 아니라 특정 문제를 해결하는 방식을 알려주는 일반적인 개념이기 때문이다.

따라서 개발자나 설계자는 이러한 디자인 패턴의 다양한 세부 개념들을 적용하여 각자의 프로그램에 맞는 해결책을 구현할 수 있다.

일반적인 문제에 대한 일반적인 해결책이라는 점에서 디자인 패턴은 알고리즘과 유사하지만 둘은 차이점이 명확히 존재 한다.

  • 알고리즘
    • 어떤 목표를 달성하기 위해 따라야 할 명확한 일련의 절차를 정의
  • 디자인 패턴
    • 해결책 자체에 대한 더 상위 수준의 설명

 

 

디자인 패턴의 역사

1994년, 에릭 감마, 존 블리시디스, 랄프 존슨, 리처드 헬름 (4인방 : Gang of Four) 즉, GoF 라 불리는 작가들에 의해

“디자인 패턴 : 재사용성을 지닌 객체지향 소프트웨어의 핵심요소” 라는 책에서 처음 소개 되었다.

여기서 다양한 객체 지향 디자인 관련한 문제를 해결하는 23가지 패턴이 소개되었으며, 이 패턴들의 개념을 프로그램에 접목시켰다.

이 후 이는 SW 설계 분야에서 교과서와 같은 표준 설계법으로 자리 잡았으며, 책 이름이 너무 긴 탓에 간단히 줄여 그냥 “GoF book” 이라는 이름으로 줄여 통용되기 시작하였다.

그 이후로도 수많은 다른 객체 지향 패턴이 발견되었고, 이러한 패턴 접근법이 다른 프로그래밍 분야에서도 인기를 얻으면서 이제는 객체 지향 디자인 외부에도 많은 패턴이 존재하게 되었다.

 

 

 

디자인 패턴의 활용

개발자들은 디자인 패턴에 대한 지식이 전무하더라도 여전히 프로그래머로 일할 수 있고, 실제로 많은 프로그래머들이 패턴에 대한 아무런 지식 없이 개발을 하고 있다.

다만, 디자인 패턴에 대한 지식을 개발자가 습득 후 개발하게 된다면 아래의 장점을 가진 채로 개발에 임할 수 있게 된다.

  • 문제해결 방식 탐색의 용이성
    • 디자인 패턴은 SW 디자인의 일반적인 문제들에 대해 시도되고 이미 검증된 해결책을 모은 것이다.
    • 물론 이러한 일반적인 문제들을 다루지 않더라도 이러한 패턴을 알고 있으면 여전히 쓸모가 있다.
    • 그 이유는 패턴을 습득했을때, 객체 지향 디자인의 원칙들을 사용해 많은 종류의 문제를 해결하는 방법들을 배울 수 있기 때문이다.
  • 의사소통의 용이성
    • 복잡한 개발 코드로 얽힌 프로젝트에서 표준화 된 디자인패턴에 대한 지식을 모두 가지고 있다면, 조금 더 간결한 용어로서 복잡하게 설명하지 않아도 서로가 무엇을 어떻게 구현해야 할지에 대해 쉽게 알리고 또 알아차릴 수 있게 된다.
  • 기능 확장/통제의 용이성
    • SW는 기본적으로 현실세계에서 발생하는 인간의 활동을 지원하는 도구로서, 업무 규칙에 따라 끊임 없이 변화하고 또 진화한다.
    • 따라서 잘 정돈된 디자인 패턴으로 구현된 코드는, 프로젝트의 미래 변화 상황에 대해 조금 더 유연하고 능동적으로 대처할 수 있는 아키텍처 패턴과 연결지어 적용 될 수 있다.

 

 

디자인 패턴의 분류

디자인 패턴은 복잡성, 상세도 및 설계 중인 전체 시스템에 대한 적용 범위에 따라 분류되며, 모든 패턴은 패턴의 의도 또는 목적에 따라 분류 될 수 있다.

  • 생성 패턴
    • 기존 코드의 재활용성과 유연성을 증가 시키면서 객체를 생성하는 다양한 메커니즘을 제공

 

  • 구조 패턴
    • 구조를 유연하고 효율적으로 유지하면서 객체와 클래스를 더 큰 구조로 조합하는 방법을 설명

 

  • 행동 패턴
    • 알고리즘 및 객체 간의 효과적인 의사소통과 책임 할당을 처리

 

 


이 포스팅 시리즈는 알렉산더 슈베츠의 디자인패턴에 뛰어들기의 번역서를 학습하고 얻은 지식을 정리한 결과물이다.

SW 개발자/설계자로 꽤나 길었던 기간만큼 일을 해왔지만 막연하게 써오고 있었던 디자인 패턴을 조금 더 명확하게 사례위주로 리뷰 해본다.

 

어쩌면 이미 디자인 패턴으로 존재 하는 패턴이지만 디자인 패턴임을 인지하지 못하고 개발 하고 있었던 부분도 있을 수도 있을 것이고,

학습하는 패턴별로 왠만하면 예제를 나의 코틀린 프로젝트 위에서 비슷한 상황을 만들어 구현 해보는 것을 목표로 한다.

 

댓글