thumbnail
디자인 패턴 이란?
Design Patterns
2022.08.21

refactoring.guru 의 글을 읽고 정리한 내용입니다.

디자인 패턴이란?

디자인 패턴은 소프트웨어 디자인에서 일반적으로 발생하는 문제에 대한 일반적인 솔루션. 코드에서 반복되는 디자인 문제를 해결하기 위해 사용자 지정할 수 있는 미리 만들어진 청사진과 같다. 패턴은 알고리즘과 혼동되는 경우가 많은데 알고리즘을 요리법에 비유한다면 패턴은 청사진에 가깝다

패턴은 무엇으로 구성되어 있나?

일반적으로 패턴에 설명에 표시되는 섹션

  • Intent (패턴의 의도) 는 문제와 솔루션을 간략하게 설명한다.
  • Motivation (동기 부여)는 패턴이 가능하게 하는 문제와 솔루션을 추가로 설명한다.
  • Structure (클래스의 구조)는 패턴의 각 부분과 어떻게 관련되어 있는지 보여준다.
  • Code exapmle (인기 있는 프로그래밍 언어 중 하나의 코드 예제)를 사용하면 패턴 이면의 아이디어를 더 쉽게 파악할 수 있다.

일부 패턴 카탈로그에는 패턴의 적용 가능성, 구현 단계 및 다른 패턴과의 관계와 같은 기타 유용한 세부 정보가 나열되어 있다.

패턴의 역사

패턴은 객체 지향 설계의 일반적인 문제에 대한 일반적인 솔루션이다. (객체 지향 설계 외에도 많은 패턴이 존재한다.)다양한 프로젝트에서 솔루션이 계속 반복되면 누군가는 결국 이름을 지정하고 솔루션을 자세히 설명한다. 이것이 기본적으로 패턴이 발견되는 방법이다.

패턴을 배워야 하는 이유?

  • 디자인 패턴은 소프트웨어 디자인의 일반적인 문제에 대한 시도되고 테스트된 솔루션의 툴킷이다. 패턴을 아는 것은 객체 지향 설계 원칙을 사용하여 모든 종류의 문제를 해결하는 방법을 가르쳐주기 때문에 유용하다.
  • 디자인 패턴은 나와 나의 팀원이 효율적으로 의사 소통하는 데 사용하는 공통 언어를 정의한다.

패턴에 대한 비판

일반적으로 패턴의 필요성은 사람들이 필요한 추상화 수준이 부족한 프로그래밍 언어나 기술을 선택할 때 발생한다. 예를 들어 전략 패턴은 대부분의 최신 프로그래밍 언어에서 간단한 익명(람다) 함수로 구현할 수 있다.

비효율적인 솔루션

패턴은 이미 널리 사용되는 접근 방식을 체계화하려고 한다. 많은 사람들은 프로젝트의 맥락에 맞게 패턴을 적용하지 않고 “문자 그대로” 패턴을 구현한다.

부당한 사용

초보자들은 패턴에 대해 배운 후 그들은 더 간단한 코드가 잘 작동하는 상황에서도 모든 곳에서 패턴을 적용하려고 한다.

If all you have is a hammer, everything looks like a nail.

패턴의 분류

디자인 패턴은 복잡성, 세부 수준 및 디자인되는 전체 시스템에 대한 적용범위에 따라 다르다. 가장 기본적이고 낮은 수준의 패턴을 종종 idioms(관용구)라고 한다. 일반적으로 단일 프로그래밍 언어에만 적용 된다. 가장 보편적이고 높은 수준의 패턴은 architectural patterns*(아키텍처 패턴)이다. 개발자는 이러한 패턴을 거의 모든 언어로 구현할 수 있다. 다른 패턴과 달리 전체 애플리케이션의 아키텍처를 설계하는데 사용할 수 있다. 또한 모든 패턴은 의도 또는 목적에 따라 분류할 수 있다. 이 책은 세 가지 주요 패턴 그룹을 다룬다.

  • Creational patterns(창작 패턴)은 기존 코드의 유연성과 재사용을 증가시키는 객체 생성 메커니즘을 제공한다.
  • Structural patterns(구조적 패턴)은 객체와 클래스를 더 큰 구조로 조합하는 방법을 설명하면서 이러한 구조를 유연하고 효율적으로 유지한다.
  • Behavioral patterns(행동 패턴)은 효과적인 의사 소통과 알고리즘 및 객체 간의 책임 할당을 처리한다.
Thank You for Visiting My Blog, Have a Good Day 😁
© 2022 Developer Minter, Powered By Gatsby.