CS/디자인 패턴과 프로그래밍 패러다임

디자인 패턴

calendar2 2024. 6. 19. 18:31

디자인 패턴이란?

프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록 하나의 "규약" 형태로 만들어 놓은 것을 의미한다.

 

디자인 패턴은 크게 3가지로 구분된다.

  • 생성 패턴
  • 구조 패턴
  • 행위 패턴

생성 패턴

생성 패턴은 객체 생성에 관련된 패턴이다. 객체의 생성과 조합을 캡슐화해 특정 객체가 생성되거나 변경되어도 프로그램 구조에 영향을 크게 받지 않도록 유연성을 제공한다.

생성 패턴의 역할을 요약하면 "추상 객체 인스턴스화"이다.

 

생성 패턴은 5가지가 있다.

  • 추상 팩토리
  • 빌더
  • 팩토리 메서드
  • 프로토타입
  • 싱글톤

 

정처기를 공부할 때 "추빌팩프싱"이라고 외운 패턴들이다.

구조 패턴

클래스나 객체를 조합해 더 큰 구조를 만드는 패턴이다. 서로 다른 인터페이스를 지닌 두 개의 객체를 묶어 단일 인터페이스를 제공하거나 객체들을 서로 묶어 새로운 기능을 제공한다.

구조 패턴의 역할은 "객체 결합"으로 요약된다.

 

구조 패턴은 7가지가 존재한다.

  • 어댑터
  • 브릿지
  • 컴포지트
  • 데코레이터
  • 프록시
  • 플라이웨이트
  • 파사드

마찬가지로 정처기를 공부할 때 "어브컴데프플파"로 외운 패턴들이다.

행위 패턴

클래스나 객체들이 서로 상호작용하는 방법이나 책임 분배 방법을 정의하는 패턴이다.

행위 패턴의 역할은 "객체 간 커뮤니케이션"이다.

 

11개의 패턴이 존재한다.

  • 책임 체인
  • 커맨드
  • 인터프리터
  • 반복자
  • 중재자
  • 메멘토
  • 옵저버
  • 상태
  • 전략
  • 템플릿 메서드
  • 방문자

패턴의 종류도 많기에 일일히 외우진 않고 일반적으로 생성 패턴과 구조 패턴을 제외한 모든 패턴을 행위 패턴으로 구분한다.

아키텍처 패턴

번외로 위 세 가지에 해당하지 않는 아키텍처 패턴으로 구분되는 패턴들도 있다. 소프트웨어 프로그래밍에서 디자인 패턴의 빈도가 높아 아키텍처 패턴이 묻히는 경우가 많은데 사실 아키텍처 패턴이 디자인 패턴보다 더 상위 개념이다.

두 패턴을 각각 비교해보자.

디자인 패턴

  • 소프트웨어 디자인의 주어진 컨텍스트 안에서 일반적으로 발생하는 문제에 대한 일반적이고 재사용 가능한 솔루션
  • 여러 상황에서 사용할 수 있는 문제 해결법에 대한 설명 or 템플릿
  • 애플리케이션 또는 시스템 디자인 시 일반적인 문제를 해결하기 위해 사용할 수 있는 형식화된 모범사례

아키텍처 패턴

  • 주어진 컨텍스트 안에서 소프트웨어 아키텍처에서 일반적으로 발생하는 문제에 대한 일반적이고 재사용 가능한 솔루션
  • 컴퓨터 하드웨어 성능 제한, 고가용성 및 비즈니스 위험 최소화 같은 소프트웨어 엔지니어링의 여러 문제 해결
  • 소프트웨어 디자인 패턴과 유사하지만 범위가 더 넓음

사실 정의만 읽어보면 두 패턴이 비슷비슷해 보이지만 개념적으로 아키텍처 패턴이 더 큰 범위라고 이해하면 될 것 같다. 아키텍처 패턴 역시 여러 패턴들이 존재하지만 우리가 대표적으로 알고있는 패턴으로는 다음 패턴들이 있다.

  • MVC 패턴
  • MVP 패턴
  • MVVM 패턴

위 세 가지 패턴 모두 비즈니스 로직과 뷰를 분리하는 패턴으로 처음 웹 개발을 배운다면 많이 들어봤으며, 배웠을 것이다.