[Design Pattern] 디자인 패턴이란?

hanni66·2023년 5월 1일
3

GDSC/DesignPattern

목록 보기
1/1
post-thumbnail

서론

GDSC 에서 8월까지 진행하는 스터디에서 디자인패턴에 대해 공부하게 됐다.
디자인 패턴의 정의와 어떤 흐름인지를 알고 나서 코드에 적용까지 해보려고한다.

이 스터디의 목표는 아래와 같다.

  • 모두가 납득할 만한 변화된 코드를 만들자.
  • "왜?"라는 이유에 답할 수 있는 코드를 만들자.
  • 훌륭한 객체 지향 프로그램을 설계하자.

이 책으로 개념에 대해 학습을 하면서 알게된 점이나 공유하고 싶은 점을 블로그에 작성하려고 한다.

먼저 책에서 GoF 디자인 패턴을 공부하는 방법 혹은 단계에 대해 자세하게 적혀있어 그 흐름을 따라가려고 한다.
1. 디자인 패턴이 무엇인지, 디자인 패턴이 어떻게 객체 지향 소프트웨어 설계에 도움을 주는 지, 디자인 패턴을 어떻게 실생활에서 응용할 수 있는 지에 대해 알아본다.
2. 디자인 패턴은 생성, 구조, 행동 이렇게 3개의 대분류로 나뉜 23개의 디자인 패턴에 대해 알아보자.

디자인 패턴이란?

GPT : 소프트웨어 개발에서 일반적인 문제에 대한 해결책을 제공하는 반복적인 설계 아이디어나 문제 해결 방법

( 이 패턴은 일반적으로 객체 지향 프로그래밍에서 발견되며, 일련의 클래스와 객체를 사용하여 프로그램을 구성함)

위에서 말하는 일반적인 문제란 무엇일까?

  • 객체 간의 상호 작용 문제
  • 객체 생성 및 소멸 관리 문제
  • 데이터베이스 연결 문제
  • 사용자 인터페이스 디자인 문제(사용자 인터페이스 디자인이 필요한 경우)

책에서 이야기하는 디자인 패턴이란?

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

하나의 디자인 패턴은 재사용이 가능한 객체지향 설계를 만들기 위해 유용한 공통의 설계 구조에서 주요 요소들을 식별해 이들에게 적당한 이름을 주고 추상화한다.

그리고 패턴에 참여하는 클래스와 그들의 인스턴스를 식별해 역할과 그들 간의 협력 관계를 정의하고 책임을 할당한다.

디자인 패턴의 장점

  • 문제 해결을 위한 특정한 설계 아이디어 제공
  • 협업 시 기존 코드를 이해하기 쉬워짐

디자인 패턴은 소프트웨어 개발자들이 복잡한 문제를 해결할 수 있는 효과적인 방법을 제공하며, 다양한 분야에서 사용된다.

디자인 패턴 기술하기

시각적인 표기(다이어그램 같은 ..)는 설계 공정의 마지막 산출물로 클래스와 객체 간의 관련성을 표현할 뿐이다.

우리가 설계를 재사용하기 좋게 만들려면 설계를 하기까지의 다양한 결정, 대안, 장단점 등을 고려한 과정도 있어야한다.

일반적으로 하나의 패턴에 꼭 들어있는 요소

  1. 패턴 이름 (pattern name)
    a. 높은 수준의 추상화된 설계를 할 수 있도록 해 준다.
  2. 문제 (problem)
    a. 언제 패턴을 사용하는가를 서술하며 해결할 문제와 그 배경을 설명한다.
  3. 해법 (solution)
    a. 설계를 구성하는 요소들과 그 요소들 간의 관계, 책임 그리고 협력 관계를 서술한다.
    b. 해법은 어떤 구체적인 설계나 구현을 설명하지는 않는다.
  4. 결과 (consequence)
    a. 디자인 패턴을 적용해서 얻는 결과와 장단점을 서술한다.
    b. 어떤 설계를 결정할 때 그 설계의 결과를 고려하지 않기가 쉽다. 하지만 선택하는 과정 혹은 비용과 효과를 측정하는 과정에서 설계 결과는 너무 중요하다.

왜 해법이 구체적인 설계나 구현을 설명하지 않을까?

  • 패턴이라 함은 다양한 경우에 적용할 수 있는 템플릿(template) 같은 의미이다. 그래서 디자인 패턴은 문제에 대한 추상적인 설명을 제공하고 문제를 해결하기 위해 클래스나 객체들의 내열 방법을 제공한다.

결론

디자인 패턴에서 패턴이 무엇일까? 라는 생각을 해보라는 이야기를 들은 적이 있어, 이에 대한 해답을 찾으려고 노력했다.

패턴의 사전적 의미는 되풀이되는 사건이나 물체의 형태 이다.

공부를 하면서 스스로 정의 내린 패턴의 의미는 다양한 경우에 적용할 수 있는 템플릿(template) 과 비슷한 의미라고 생각했다.

그럼 왜 디자인 템플릿이 아닌 디자인 패턴일까?

패턴, 템플릿의 의미를 보면 재사용 측면에서는 비슷하게 받아드릴 수 있다.
하지만 디자인 패턴은 일반적인 문제를 해결하는 것이 아닌, 특정한 맥락에서 발생하는 문제를 해결하기 위한 더 구체적이고 세부적인 해결책을 제공하게 된다.
여기서 말하는 해결책은 템플릿처럼 단순히 복사해 프로젝트에 적용시키는 것이 아닌, 문제의 성격과 환경에 따라 수정해 적용해야된다.

앞으로 디자인 패턴에 공부를 하면서 특정한 맥락에서 발생하는 문제를 해결한다는 의미를 각 디자인 패턴에 맞춰 알아가야겠다.

참고

Erich Gamma(김정아).2015.GoF의 디자인 패턴 - 재사용성을 지닌 객체지향 소프트웨어의 핵심요소.프로텍미디어

0개의 댓글