디자인패턴(1)

guddls ju·2022년 10월 25일
0
post-thumbnail

디자인 패턴에 대해 잘 정리되어 있는 글을 발견하고 공부를 하던 중 내가 이해하는 방식으로 조금씩 정리를 해보고자 한다.


🤷‍♂️디자인패턴을 왜 배워야 할까?

디자인 패턴은 소프트웨어 디자인의 일반적인 문제들에 대해 시도되고 검증된 해결책들을 모은 것이다. 이러한 문제들을 다루지 않더라도 패턴을 알고 있으면 여전히 쓸모가 있는데, 그건 패턴을 배우게 되면 객체 지향 디자인의 원칙들을 사용해 많은 종류의 문제를 해결하는 방법들을 배울 수 있기 때문이다. = 문제 해결 방법의 패턴들을 배울 수 있음

디자인 패턴은 당신과 당신의 팀원들이 더 효율적으로 의사소통하는 데 사용할 수 있는 공통 언어를 정의할 수 있다. 예를 들어서 당신의 팀이 디자인 패턴을 이해하면 업무 처리 중 당신이 '그 문제를 위해서는 그냥 싱글턴을 사용하세요'라고 말하면 모두가 당신이 무엇을 뜻했는지 이해할 수 있을 것이며 싱글턴 패턴에 포함된 개념들은 설명할 필요도 없을 것이다. = 효울적인 의사소통 가능


👨‍🏫디자인패턴이란?

디자인 패턴은 소프트웨어 디자인 과정에서 자주 발생하는 문제들에 대한 일반적인 해결책들이다. 코드에서 반복적으로 되풀이되는 디자인 문제들을 해결하기 위하여 맞춤화할 수 있는 청사진들을 미리 만들어 놓은 것과 같다.

패턴은 재사용할 수 있는 코드 조각이 아니라 특정 문제를 해결하는 방식을 알려주는 일반적인 개념으로, 패턴의 세부 개념들을 적용하여 프로그램에 맞는 해결책을 구현할 수 있다.

패턴은 알고리즘과 자주 혼동된다. 왜냐하면 두 개념 모두 알려진 문제에 대한 일반적인 해결책을 설명하기 때문. 알고리즘은 어떤 목표를 달성하기 위해 따라야 할 명확한 일련의 절차를 항상 정의하지만, 패턴은 해결책에 대한 더 상위 수준의 설명이다. 예를 들어 같은 패턴을 두 개의 다른 프로그램에 적용하면 두 프로그램의 코드는 다를 것이다.

알고리즘을 요리법에 비유할 수 있다면 패턴은 청사진에 비유할 수 있다. 둘 다 목표를 달성하기 위한 명확한 단계들이 제시되어 있지만, 요리법에는 어떻게 요리를 완성하는지에 대한 단계들이 명확하게 제시되어 있으나, 청사진은 결과와 기능들을 제시하나 정확한 구현 순서는 사용자가 지정한다.


🛠 패턴의 구성

  • 패턴의 의도 섹션에서는 문제와 해결책을 간략하게 설명한다.
  • 동기 섹션에서는 문제를 추가 설명한 후 패턴이 가능하게 하는 해결책도 추가 설명한다.
  • 클래스의 구조 섹션에서는 패턴의 각 부분과 이러한 부분들이 어떻게 연관되어 있는지 보았다.
  • 코드 예시 섹션에서는 여러 인기 있는 프로그래밍 언어들로 된 코드 예시를 제공하여 독자들이 패턴 뒤의 아이디어를 이해하기 쉽도록 했다.

🛒 패턴의 분류

디자인 패턴은 복잡성, 상세도 및 설계 중인 전체 시스템에 대한 적용 범위에 따라 분류된다. 도로 건설에 비유하여 예를들면, 교차로를 더 안전하게 만들기 위해 신호등을 설치하거나 보행자를 위한 지하도가 있는 전체 다층 인터체인지를 구축하는 작업에 비유할 수 있다.

가장 기본적인 하위 설계 패턴을 이디엄이라고 한다. 일반적으로 이디엄은 단일 프로그래밍 언어에만 적용할 수 있다.

아키텍처 패턴은 상위 설계 패턴이며 가장 보편적으로 사용된다. 개발자들은 거의 모든 언어로 아키텍처 패턴들을 구현할 수 있으며 다른 패턴들과 달리 애플리케이션 전체의 구조(아키텍처)를 설계하는 데 사용할 수 있다.

또한 모든 패턴은 패턴의 의도 또는 목적에 따라 분류할 수 있다.

  • 생성 패턴들은 기존 코드의 재활용과 유연성을 증가시키는 객체 생성 메커니즘들을 제공합니다.
  • 구조 패턴은 구조를 유연하고 효율적으로 유지하면서 객체와 클래스를 더 큰 구조로 조합하는 방법을 설명합니다.
  • 행동 패턴은 객체 간의 효과적인 의사소통과 책임 할당을 처리합니다.

🧮 디자인 패턴 목록

  • 생성 패턴
    • 기존 코드의 유연성과 재사용을 증가시키는 다양한 객체 생성 메커니즘들을 제공
  • 구조 패턴
    • 객체들과 클래스들을 구조를 유연하고 효율적으로 유지하면서 더 큰 구조로 조립하는 방법설명
  • 행동 패턴
    • 패턴들은 알고리즘들 및 객체 간의 책임 할당과 관련

참고 https://refactoring.guru/ko/design-patterns

profile
효율에 미친자

0개의 댓글