본문 바로가기
공부/[개발 관련]

[개발 관련] Design pattern(디자인 패턴)에 대하여

by 인생은아름다워 2022. 1. 29.

✏️ 프로그래밍 디자인 패턴이란?

프로그래밍 디자인 패턴이란 소프트웨어를 설계할 때 자주 나타나는 패턴을 정형화 해둔 것이다. 좋은 소프트웨어 설계를 위한 개발자들의 경험적 산물이다.

“특정한 상황에서 일반적 설계문제를 해결하기 위해 상호 교류하는 수정 가능한 객체와 클래스들에 대한 설명이다.” - GoF

“숙련된 객체지향 개발자 및 기타 소프트웨어 개발자는 소프트웨어 개발의 가이드라인이 되는 일반적인 원칙들과 관용적인 해결책들의 레퍼토리(repertoire)를 구축한다. 패턴은 이러한 원칙들과 관용적 해결책들이 문제와 해결책을 기술하는 구조적인 형태로 체계화되고 명명된 것이다.” - 라만(C.Larman)

✏️ 프로그래밍 디자인 패턴의 특징

  1. 경험적으로 얻어진다.
  2. 특정한 형식을 가지고있다. 체계적으로 작성된다.
  3. 패턴마다 각기 다른 추상화 수준이 존재한다. 또한 계속해서 진화한다.

✏️ 프로그래밍 디자인패턴의 장점

  1. 의사소통에 도움을 준다. 특정 디자인패턴을 알고있는 설계자들 끼리 논의할 경우 원활하게 의사소통이 가능하다.
  2. 검증된 패턴을 통해 완성도 높은 디자인을 빠르게 만들어 낼 수 있다. 이를 통해 소프트웨어 개발 비용을 줄이며, 코드 수준을 높인다. 예를 들어서 적은 수의 클래스로 원하는 목적의 프로그램을 작성할 수 있다.
  3. 어떤 디자인 패턴으로 설계되었는지 이름만 들어도 어떤 구조로 프로그램이 구성되어 있는지 알 수 있다. 이를 통해 소프트웨어를 새롭게 접근할 때 빠르게 이해하고, 적응하고, 재사용할 수 있게 된다.

✏️ 디자인 패턴의 분류

새로운 소프트웨어를 개발하게 되면 개발자는 어떤 클래스를 만들어서 어떻게 객체를 생성, 소멸 시킬지에 대해서 고민하며, 동시에 어떤 데이터를 어떻게 받아서 처리할지에 대해 구조설계를 진행한다.

디자인 패턴을 이렇게 소프트웨어 프로그래밍을 할 때 자주 반복되는 특정 상황에서 설계를 용이하게하고, 재사용 하기 쉽도록 정리해 둔 것 디자인 패턴 분류이다. 분류하는 방법은 여러 방법이 있지만, 가장 잘 알려진 분류법은 GoF의 패턴 분류 방법이다. GoF는 디자인 패턴을 목적과 범위로 분류했다. 몇가지 예시를 통해 확인해 보자.

참고로 GoF는 Gang of Four의 약자로, 위의 디자인패턴이라는 책을 기술한 4인을 말한다.


  • 목적
  1. 생성 : 객체의 생성 과정에 관여하는 패턴
  2. 구조 : 클래스나 객체의 구성을 통해 더 큰 구조로 만들 수 있게 해주는 것과 관련된 패턴
  3. 행위 : 패턴을 주로 클래스에 적용하는지, 객체에 적용하는지에 따라 구분되는 패턴
  • 범위
  1. 클래스 패턴 : 클래스와 하위 클래스 간의 관계를 다루는 패턴. 컴파일 시 관계가 결정된다.
  2. 객체 패턴 : 객체 간의 관계를 다루는 패턴. 보통 구성을 통해 결정되며, 일반적으로 실행시간(runtime)에 관계가 생성되기 때문에 더 동적이고 유연하다.

  • 싱글톤 패턴 (Singleton Pattern)

객체의 생성에 관련된 패턴, 특정 클래스의 인스턴스가 오직 하나임을 보장하고 이 인스턴스에 접근할 방법을 제공한다.

목적 : 생성

범위 : 객체

  • 퍼사드 패턴 (Facade Pattern)

Facade(정면)이라는 말 처럼 개발자가 사용해야 하는 서브시스템의 가장 앞쪽에 위치하며, 하위 시스템에 있는 객체들을 사용할 수 있도록 하는 역할을 하는 패턴. 시스템의 복잡성을 줄이기 위해 서브시스템을 구조화 하고 서브시스템으로의 접근을 퍼사드 객체로 제공하는 패턴

목적 : 구조

범위 : 객체

  • 옵저버 패턴 (Observer Pattern)

객체의 상태변화를 감지하는 옵저버를 두고, 이들의 목록을 객체에 등록하여 상태 변화가 있을 때 마다 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 패턴

목적 : 행위

범위 : 객체

  • 스트래티지 패턴 (Strategy Pattern)

알고리즘을 담당하는 각각의 클래스를 만들어서 책임을 분산하기 위한 목적으로 만드는 행위 패턴

목적 : 생성

범위 : 클래스

  • 팩토리 패턴 (Factory Pattern)

객체를 생성하기 위한 인터페이스를 정의하지만, 어떤 클래스의 인스턴스를 생성할지에 대한 결정은 하위 클래스에서 이루어지도록 인스턴스 생성의 책임을 떠넘기는 패턴

목적 : 생성

범위 : 클래스

🍎 결론

이것 말고도 여러 패턴들이 있겠지만, 일단 이해가 잘 되지는 않는다. 개발을 하면서 필요한 디자인 패턴들에 대해서 하나씩 공부해 가야겠다.

사실, 디자인 패턴을 공부하는 목적은 이 패턴들이 있다고 암기하는것이 아니라, 이런 것들이 있으니 적재적소에 잘 사용하기 위함일 것이다. 그러니까, 어떤 디자인패턴을 만든 이유를 잘 모르고 무턱대고 사용하면 오히려 상당히 비효율적인 시스템 개발을 하게될 것이다. 그러니 꼭! 예시 들과 함께 공부하여, 어떤 상황이 특정 디자인패턴을 공부하는 적절한 상황인지에 대한 생각을 많이 해봐야 할 것 같다.

 

🗒️ 참고자료

boost course - iOS 앱 프로그래밍

댓글