디자인 패턴이란? 그리고 그 종류는?

니냐뇨·2022년 9월 27일
0

개발을 하면서 더 좋은 코드를 위한 고민을 하다보면, 아니면 개발을 시작한지 얼마 되지 않았더라도 언젠가 한번쯤은 듣게 되는 단어가 있죠.
싱글톤(Singleton), MVC, MVVM, 디자인 패턴과 같은 단어 말이에요..!! 이 글에서는 이 단어들과 관련된 디자인 패턴이 무엇인가에 대해 살펴보도록 하겠습니다!


디자인 패턴이란?

소프트웨어 디자인 패턴(software design pattern)은 소프트웨어 공학의 소프트웨어 디자인에서 특정 문맥에서 공통적으로 발생하는 문제에 대해 재사용 가능한 해결책이다. 소스나 기계 코드로 바로 전환될수 있는 완성된 디자인은 아니며, 다른 상황에 맞게 사용될 수 있는 문제들을 해결하는데에 쓰이는 서술이나 템플릿이다.
출처: 위키 백과

디자인 패턴은 개발에서 발견된 설계의 노하우들이 모여(경험의 산물) 일반적인 해결책입니다. 구체적인 구현이라기 보다는 코드를 작성하기 위한 시작점이라고 할 수 있죠.

"흠...그냥 내가 원하는 대로 돌아가기만 하면 되지, 그런 패턴 같은 게 왜 필요해?"
라고 생각하시는 분도 있을 거에요.

디자인 패턴을 사용하면 어떠한 이점이 있을까요?

디자인 패턴의 이점

  1. 개발 과정에서의 의사소통 비용(cost)를 줄일 수 있다.
    • 팀원들이 '싱글톤 패턴'을 알고 있다면, 단순히 '싱글톤 패턴을 사용해봐'라는 말로도 소통이 이루어 질 수 있다.
  2. 개발 비용을 줄일 수 있다.
    • 이미 만들어진 디자인 패턴을 통해 높은 완성도의 개발을 더 빠르게 할 수 있다.
    • 디자인에 대한 고민을 줄여주어 코드에 더 집중할 수 있게 해준다.
  3. 빠른 개발자 온보딩에 도움을 준다.
    • 이전의 설계에 사용된 패턴을 알면 코드의 구조를 더 빨리 파악할 수 있게 된다.

디자인 패턴의 종류

  • Creational Pattern
    • 객체의 생성에 관련된 패턴.
    • Bulider, Singleton, Prototype 패턴 등이 여기에 해당.
  • Structural Pattern
    • 객체들이 구성되고 결합되어서 더 큰 구조를 만드는 패턴.
    • Facade, MVC, MVVM 등이 여기에 해당.
      (MVC, MVVM은 아키텍처 패턴인가에 대한 논쟁이 있다.)
  • Behavioral Pattern
    • 객체간의 상호작용이나 책임 분배 방법을 정의하는 패턴.
    • Delegation, Strategy, Observer 패턴 등이 여기에 해당.

이외에도 GoF(Gang of Four)라 불리는 사람들이 23가지의 디자인 패턴을 정리하고 위와 같은 3가지로 분류했습니다.

Creational PatternStructural PatternBehavioral Pattern
Abstract factoryAdapterChain of responsibility(책임 연쇄)
BuilderBridgeCommand
Factory MethodCompositeInterpreter
PrototypeDecoratorIterator
SingletonFacade(퍼사드)Mediator
FlyweightMemento
ProxyObserver
State
Strategy
Template method
Visitor

디자인 패턴에 대한 비판

패턴에만 집중하다보면 간단한 코드로 해결되는 상황에서도 패턴을 적용하려고 한다거나, 패턴의 남용으로 인한 프로젝트의 복잡도를 높이는 일이 일어날 수도 있습니다.
또한, 디자인 패턴은 아이디어 일 뿐이지 실질적으로 구현된 것은 아니므로 디자인 패턴을 아는 것이 무조건 좋은 코드로 이어지진 않습니다.

따라서 디자인 패턴을 무작정 도입하기 보다는 프로젝트에서 우리가 해결하고자 하는 문제가 무엇인지 명확하게 하는 것이 더 중요하다고 생각됩니다.

그러고 난 뒤에 디자인 패턴을 이용하면 위에 말한 장점을 더 잘 이용할 수 있겠죠!


이번 글에서는 디자인 패턴이란 무엇인지에 대해 살펴보았는데요, 궁금한 점이나 보충하고 싶은 의견이 있다면 댓글로 남겨주세요!
읽어주셔서 감사합니다 :)

profile
열심히 살자.

0개의 댓글