디자인 패턴 - 디자인 패턴이란?

상수·2022년 8월 27일
0

디자인 패턴

목록 보기
1/1

시작하며

안녕하세요. 저는 스타트업에서 백엔드 개발을 하고 있습니다.

제가 다니는 회사에서는 격주마다 개발 공부를 하는 동아리가 있는데, 얼마 전부터 디자인 패턴 공부를 시작하기로 했습니다. 《헤드 퍼스트 디자인 패턴》에 있는 챕터를 돌아가면서 발표하는 방식이고, 제 차례는 아직 오지 않았기에 저번 모임에서는 발표를 듣는 입장이었습니다.

그런데 발표를 하셨던 동료분께서 이 패턴을 실제 업무에 사용해보았다는 이야기를 하셨습니다. 책의 예시처럼 자바도 아니었고 프레임워크 때문에 적용하기 쉽지 않을거라 생각했는데, 대단하기도 하고 본받고 싶다는 생각이 들었습니다.

그래서 저 역시 제 발표내용만 정리할 게 아니라 책에 있는 디자인 패턴에 대해 미리 학습하고 직접 코딩하며 머릿속에 담아두려고 합니다. 아울러, 이후에 디자인 패턴을 공부하게 될 분들을 위하여 정리글을 벨로그에 남깁니다.


디자인 패턴?

디자인 패턴이라는 용어는 아마 대학교 2학년 때 객체지향 수업에서 들어본 적이 있습니다. 당시 교수님께서 학기 막바지에 정규 과목의 모든 범위를 나간 이후, 몇 가지의 디자인 패턴에 대해 수업을 하신 적이 있었습니다. 저는 그 때 시험범위 내용 외우기도 벅찼기에 "이런 게 있구나..." 하고 넘어갔던 기억이 있습니다.

일단 위키백과에 따르면 디자인 패턴의 정의는 이렇습니다.

소프트웨어 디자인 패턴 (software design pattern)은 소프트웨어 공학의 소프트웨어 디자인에서 특정 문맥에서 공통적으로 발생하는 문제에 대해 재사용 가능한 해결책(reuseable solution)이다. 소스나 기계 코드로 바로 전환될수 있는 완성된 디자인은 아니며, 다른 상황에 맞게 사용될 수 있는 문제들을 해결하는데에 쓰이는 서술이나 템플릿이다. 디자인 패턴은 프로그래머가 어플리케이션이나 시스템을 디자인할 때 공통된 문제들을 해결하는데에 쓰이는 형식화 된 가장 좋은 관행 (best practice)이다.

재사용 가능한 해결책, 템플릿, 좋은 관행이라는 키워드가 눈에 띕니다. 선배 개발자들이 우리가 개발을 하면서 겪는 여러 문제들에 대해 먼저 부딪혀보고 만든 모범답안이라는 이야기가 아닐까 생각합니다.


GoF의 디자인 패턴

디자인 패턴을 다룬 책 중 가장 유명한 책은 《Design Patterns: Elements of Reusable Object-Oriented Software》이라고 합니다. 이 책에서 소개하는 디자인 패턴과 그 분류는 일명 GoF의 디자인 패턴으로 많이 알려져있습니다. GoF (Gang of Four)는 책의 저자 4인방을 의미한다고 합니다.


GoF 디자인 패턴의 분류

GoF 디자인 패턴에서는 패턴의 종류를 세 가지로 나눴는데, 다음과 같습니다.

생성 패턴 (Creational Pattern)

  • 객체 생성에 관련된 디자인 패턴입니다. 이 패턴은 특정 상황에서 객체를 생성하는 데 있어 더욱 더 유연성(Flexibility)을 제공합니다.
  • 생성 패턴에 해당하는 기법은 추상 팩토리 패턴, 빌더 패턴, 팩토리 메서드 패턴, 프로토타입 패턴, 싱글턴 패턴입니다.

구조 패턴 (Structural Pattern)

  • 클래스와 객체를 조합하여 구조를 확장시킬 수 있게 하는 패턴입니다.
  • 구조 패턴에 해당하는 기법은 어댑터 패턴, 브리지 패턴, 합성 패턴, 데코레이터 패턴, 파사드 패턴, 플라이웨이트 패턴, 프록시 패턴입니다.

행위 패턴 (Behavioral Pattern)

  • 클래스나 객체 간의 상호작용에 대한 패턴입니다.
  • 행위 패턴에 해당하는 기법은 책임연쇄 패턴, 커맨트 패턴, 해석자 패턴, 반복자 패턴, 옵저버 패턴, 전략 패턴, 템플릿 메서드 패턴, 방문자 패턴, 중재자 패턴, 상태 패턴, 기념품 패턴입니다.

GoF 디자인 패턴에 소개되지 않은 패턴들도 있지만, 일단은 이를 기준으로 공부하고자 합니다.


다음으로

다음 글부터 디자인 패턴에 대해 하나씩 살펴 볼 생각입니다.

profile
Dart와 TypeScript를 다룹니다.

0개의 댓글