티스토리 뷰

개요

개발 중 자주 나오는 디자인 패턴에 대한 기본 정보를 알아보고 정리하게 되었다.

전체적인 흐름을 알아보고 다음 발표부터 순차적으로 패턴 사용법을 알아볼 예정이다.

 

https://sourcemaking.com/design_patterns

https://www.freecodecamp.org/news/javascript-design-patterns-explained/#singleton-pattern

 

내용

디자인 패턴이란?

4명의 C++ 개발자가 1994년 출판한 "Design Patterns: Elements of Reusable Object-Oriented Software" 책으로 객체 지향 프로그래밍의 기능과 함정을 탐구하고 일반적인 프로그래밍 문제를 해결하기 위해 구현할 수 있는 23가지 패턴을 소개하며 대중화 되었다.

  • 소프트웨어 디자인에서 일반적으로 발생하는 문제에 해결할 수 있는 반복 가능한 솔루션
  • 특정 종류의 문제를 해결하기 위해 사용할 수 있는 아이디어, 의견 및 추상화에 가까운 것
  • 알고리즘이나 특정 구현이 아니다.
  • 다양한 요인에 따라 구현 방법이 달라질 수 있다.
  • OOP C++ 프로그래밍을 염두해내고 생각해 낸 것으로 javaScript 또는 기타 프로그래밍 패러다임과 같은 보다 현대적인 언어의 경우 유용하지 않은 패턴이 있을 수 있다.

 

디자인 패턴의 종류 

  • 창조적인 디자인 패턴 (Creational design patterns)
    • 클래스를 인스턴스화 하는 패턴
    • 클래스 생성 패턴과 객체 생성 패턴으로 나뉨
      • 클래스 생성 패턴 : 인스턴스화 프로세스에서 상속을 효과적으로 사용
      • 객체 생성 패턴 : 위임을 효과적으로 사용하기 위한 작업
  • 구조 디자인 패턴 (Structural design patterns)
    • 클래스 및 개체 구성에 관한 패턴
    • 상속을 사용하여 인스턴스를 구성함
    • 새로운 기능을 얻기 위해 개체를 구성하는 방법을 정의
  • 동작 디자인 패턴 (Behavioral design patterns)
    • 클래스 개체간의 통신에 관한 패턴
    • 개체 간의 통신과 가장 구체적으로 관련됨

 

창조적인 디자인 패턴 (Creational design patterns)

  • Abstract Factory
    • 구체적인 클래스를 지정하지 않고도 관련 객체의 상속 클래스를 생성할 수 있음.
    • 일부 속성과 메서드만 공유하는 개체를 만들어야하는 상황에서 유용
  • Builder
    • 일반적으로 객체에 특정 속성이나 메서드를 추가하는 함수나 메서드가 존재함.
    • 속성과 메서드 생성을 다른 Entity로 분리함.
  • Factory Method
    • 객체 생성 후 수정할 수 있는 객체 생성을 위한 인터페이스를 제공하는 패턴
    • 개체를 생성하는 코드가 한곳에 중앙 집중화 되어 코드를 단순화하고 더욱 잘 구성할 수 있음
  • Object Pool
    • 객체를 필요로 할 때 풀을 요청하고 반환하는 일련의 작업을 수행하는 패턴
    • 많은 수의 인스턴스 생성하거나 무거운 객체를 매번 인스턴스화 할 때 성능 향상을 가져오기도 함.
    • pool이란 메모리에 보관되어 사용할 준비가 된 리소스의 모음
  • Prototype
    • 다른 개체의 청사진으로 사용하여 개체의 속성과 메서드를 상속하는 개체를 만들 수 있음.
    • JavaScritp의 Prototype 상과 동일한 매커니즘
    • 동일한 클래스에 의존하지 않고 개체 간의 속성과 메서드를 공유할 수 있음.
  • Singleton
    • 클래스가 변경 불가능한 인스턴스를 하나만 갖도록 하는 디자인 패턴
    • 복사하거나 수정할 수 없는 객체 (불변)

구조 디자인 패턴 (Structural design patterns)

  • Adapter
    • 호환되지 않는 인터페이스가 있는 두 개체를 서로 상호작용할 때 사용하는 패턴
  • Bridge
    • 대규모 클래스 또는 밀접하게 관련된 클래스들을 서로 독립적으로 개발할 수 있는 두 개의 개발 계층(추상 및 구현)으로 분할하는 구조적 디자인 패턴
  • Composite
    • 개체를 트리 구조로 구성한 다음 이러한 구조를 개별 개체인 것 처럼 작업할 수 있는 디자인 패턴
    • 앱의 핵심 모델을 트리로 나타낼 수 있는 경우에 사용해야 이 패턴이 의미를 가진다.
  • Decorator
    • 동작을 포함하는 특수 래퍼 개체 안에 개체를 배치하여 새로운 동작을 추가하는 패턴
  • Facade
    • 라이브러리, 프레임워크 또는 기타 복잡한 클래스에 대한 단순화된 인터페이스를 제공하는 패턴
    • 선언적 프로그래밍에 대해 생각할 때 복잡성을 숨기는 추상화를 제공함.
  • Flyweight
    • 각 개체에 모든 데이터를 유지하는 대신 여러 개체 간에 상태의 공통 부분을 공유하여 사용 가능한 RAM 양에 더 많은 개체를 맞출 수 있는 패턴
    • Flyweight 패턴을 사용하는 개체는 다른 컨텍스트에 사용될 수 있으므로 해당 상태를 수정할 수 없는 불변성을 가져야함
  • Private Class Data
    • 속성(데이터) 의 가시성을 최소화하여 클래스 상태를 보호하는 디자인 패턴
  • Proxy
    • 다른 개체에 대한 대체 또는 자리 표시자를 제공하는 패턴
    • 원래 객체에 대한 액세스를 제어하여 요청이 실제 원본 객체에 도달하기 전이나 후에 일종의 작업을 수행함
    • ExpressJS에 익숙하면 자주 접하는 패턴

동작 디자인 패턴 (Behavioral design patterns)

  • Chain of responsiblity
    • 일련의 핸들러를 따라 요청을 전달하는 패턴
    • 각 핸들러는 요청을 처리할지 또는 체인의 다음 핸들러로 전달할지를 결정함
  • Command
    • 요청에 대한 모든 정보를 포함한 독립 실행형 개체로 바꾸는 패턴
    • 요청을 메서드 인수로 전달하고, 요청 실행을 지연하거나 대기열에 추가하거나 실행 취소를 하는 작업을 지원함.
  • Interpreter
    • 도메인 언어를 간단한 언어 문법으로 정의하고, 도메인 규칙을 언어 문장으로 나타내며 이러한 문장을 해석하여 문제를 해결하는 디자인 패턴
    • 클래스를 사용하여 각 문법 규칙을 나타내고, 일반적으로 계층 구조이므로 규칙 클래스의 상속 계층 구조가 잘 매핑됨.
  • Iterator
    • 컬렉션의 요소를 순회하는데 사용하는 패턴
    • for, forEach, map, reduce, filter 등을 반복하기 위해 마음대로 사용할 수 있는 모든 JavaScript 내장 함수는 반복자 패턴의 예시.
  • Mediator
    • 개체 간의 혼란스러운 종속성을 줄일 수 있는 패턴
    • 개체 간의 직접적인 통신을 제한하고, 중재자 개체를 통해서만 공동 작업을 수행하도록 함
  • Memento
    • 구현 세부 정도를 공개하지 않고 개체의 이전 상태를 저장하고 복원할 수 있는 패턴
    • 개체가 나중에 해당 상태로 복원될 수 있도록 개체의 내부 상태를 캡쳐하고 외부화 함.
  • Null Object
    • 적절한 기본 동작을 수행하지 않는 대체 가능한 대안을 제공하여 개체가 없음을 캡슐화하는 패턴
  • Observer
    • 관찰하는 개체에 발생하는 모든 이벤트에 대해 여러 개체에 알리는 구독 메커니즘을 정의하는 패턴
    • 주어진 객체에 이벤트 리스너가 있는 것과 같다.
    • React의 useEffect가 좋은 예시.
  • State
    • 개체 내부 상태가 변경될 때 개체의 동작을 변경할 수 있도록 하는 패턴
    • 행동이 상태에 의존하게 만드는 문제에 대한 해결책
  • Strategy
    • 일련의 알고리즘을 정의하고, 각각 별도의 클래스에 넣어 객체를 상호 교환하게 만드는 패턴
    • 객체 지향 5원칙 중 하나인 개방 폐쇄 원칙을 지킬 수 있다.
  • Template Method
    • 슈퍼 클래스에서 알고리즘의 골격을 정의하지만 서브 클래스가 구조를 변경하지 않고 알고리즘의 특정 단계를 재정의 할 수 있도록 하는 패턴
    • 알고리즘을 일련의 단계로 나누고, 이러한 단계를 메서드로 전환하고, 단일 템플릿 메서드 내에서 메서드에 대한 일련의 호출을 넣는 방식을 제시함.
  • Visitor
    • 작동하는 개체에서 알고리즘을 분리할 수 있는 패턴
    • 동작을 수행하는 개체는 Visitor 메서드 중 하나에 인수로 전달되어 개체 내에 포함된 모든 필수 데이터에 대한 접근 권한을 제공함.

결론

평소에 접해본 패턴도 많았고, 처음 접하는 패턴도 있었는데

앞으로 스터디를 진행하면서 javascript에서 패턴을 적용해보고 이해할 수 있도록 공부해야겠다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함