STUDY

디자인 패턴 51개의 한줄 요약 모음

nicesugi 2023. 8. 22. 21:57

소프트웨어 설계에서 특정 문제를 효율적으로 해결하는 데에 자주 사용되는 설계 구조나 틀을 의미한다.

코드의 재사용성, 유지보수성, 읽기 쉬움 등을 향상시킬 수 있다.

 

디자인 패턴의 수는 고정되어 있지 않고, 다양한 패턴이 존대한다.

널리 알려진 건 "Design Patterns: Elements of Reusable Object-Oriented Software" 책에 의해 공식화된 23개의 디자인 패턴이라고 한다.

이 책의 4명의 저자를 GoF라고 부르는데, GoF의 디자인패턴은 크게 생성, 구조, 행위의 3가지 카테고리로 분류한다.

 

이 외에도 찾아보니

서브, 애플리케이션 도메인, 아키텍쳐, 모듈화 패턴가 있더라.

 

일단 쭉 노션에 정리를 하던 중인데.. 50개가 넘더라.. 신나서 찾다보면 더 나오길래 일단 멈추고 한줄 요약을 해보았다.

 

생성 패턴 Creational Patterns

객체 생성과 관련된 문제를 해결하는데 집중함.

  • Singleton : 싱글톤 패턴 ; 하나의 인스턴스만 생성되도록 하는 패턴
  • Factory Method : 팩토리 메서드 패턴 ; 인스턴스 생성 로직을 하위 클래스로 위임
  • Abstract Factory : 추상 팩토리 패턴 ; 여러 Factory Method를 한 곳에 모아 관리
  • Builder : 빌더 패턴 ; 복잡한 객체의 생성과정을 단순화하기 위해 사용
  • Prototype : 프로토타입 패턴 ; 기존 객체를 복제하여 새 객체를 생성

 

구조 패턴 Structural Patterns

클래스나 객체가 함께 작동하는 구조를 설계함.

  • Adapter : 어댑터 패턴 ; 인터페이스가 다른 두 객체를 함께 작동하도록 함
  • Bridge : 브릿지 패턴 ; 추상화와 구현을 분리하여 각각 독립적으로 변화할 수 있게 함
  • Composite : 컴포지트 패턴 ; 단일 객체와 복합 객체를 같은 타입으로 다룰 수 있게 함
  • Decorator : 데코레이터 패턴 ; 객체에 새로운 기능을 동적으로 추가
  • Facade : 퍼사드 패턴 ; 복잡한 시스템에 대한 간단한 인터페이스를 제공
  • Flyweight : 플라이웨이트 패턴 ; 공유를 통해 많은 수의 유사 객체를 효율적으로 지원
  • Proxy : 프록시 패턴 ; 다른 객체에 대한 대리자 또는 대체자를 제공

 

행동 패턴 Behavioral Patterns

객체의 책임과 알고리즘을 조직화함.

  • Chain of Responsibility : 책임 연쇄 패턴 ; 요청을 처리할 수 있는 기회를 하나 이상의 객체에게 부여
  • Command : 커맨드 패턴 ; 요청을 객체로 캡슐화
  • Iterator : 이터레이터 패턴 ; 컬렉션 요소에 순차적으로 접근하여 방법을 제공
  • Mediator : 중재자 패턴 ; 객체와 객체 사이의 결합도를 줄이기 위해 중재자 역할을 함
  • Memento : 메멘토 패턴 ; 객체의 상태를 캡쳐하고 이후 복원하는 기능을 제공
  • Observer : 옵저버 패턴 ; 상태 변화를 가진 객체와 이를 관찰하는 객체 사이의 의존성을 정의
  • State : 스테이트 패턴 ; 객체의 상태에 따라 행동을 변경
  • Strategy : 전략 패턴 ; 알고리즘을 캡슐화하여 동적으로 알고리즘을 교체할 수 있게 함
  • Template Method : 템플릿 메서드 패턴 ; 알고리즘의 뼈대를 정의하고 일부 단계를 하위 클래스에게 위임
  • Visitor : 방문자 패턴 ; 객체 구조를 이루는 원소에 대해 추가적인 작업을 수행하도록 함

 

서브 패턴 Sub-patterns

다른 디자인 패턴과 함께 사용되거나 그 디자인 패턴 내부에 통합될 수 있는 작은 패턴

예를 들면, Factory Method 패턴은 Abstract Factory 패턴 내부에서 종종 사용되는 서브 패턴임.

  • Registry : 객체를 중앙에서 관리할 수 있게 하는 패턴
  • Object Pool : 생성 비용이 높은 객체를 효율적으로 재사용하기 위한 패턴
  • Factory Method as a Sub-patterns : Abstract Factory패턴에서 Factory Method패턴이 일반적으로 사용됨
    Abstract Factory가 여러 종류의 객체를 생성하는 반면, 각 종류의 객체 생성을 담당하는 Factory Method가 있을 수 있음
  • Template Method as a Sub-patterns : State, Strategy 패턴에서 Template Method 패턴이 사용될 수 있음.
    공통된 로직을 상위 클래스에 정의하고, 상세 구현을 하위 클래스에 위임하는 방법으로 상위 수준의 패턴을 깔끔하게 유지할 수 있음
  • Singleton as a Sub-patterns : 종종 다른 패턴, Logger 또는 Connection Pool에서 Singleton패턴이 사용됨.
    이런 경우 Singleton패턴은 자원을 공유하는 메커니즘을 제공함.
  • Decorator as a Sub-patterns : 런타임에 객체에 새로운 기능을 추가하는 Decorator패턴은 종종 GUI구성요소나 스트림 처리와 같이 확장성이 중요한 시스템에서 서브패턴으로 사용됨

 

애플리케이션 전문 패턴 Domain Specific Patterns

특정 애플리케이션 도메인에 맞춰진 디자인 패턴

  • Active Record : 데이터베이스 레코드와 객체 지향 프로그래밍을 연결하는 패턴
    레코드를 객체로 표현, 레코드를 CRUD 하는 메서드를 제공함
  • Repository : 레포지토리 패턴 ; 데이터 접근 로직을 캡슐화하여, 비즈니스 로직과 데이터 저장소 간의 의존성을 줄임
  • DAO : Data Access Object ; 데이터베이스에 대한 CRUD 연산을 캡슐함
    데이터베이스의 CRUD 연산을 추상화하여 객체지향적으로 접근할 수 있게 해줌
  • Unit of Work : 데이터베이스 연산을 하나의 작업 단위로 묶어 트랜잭션을 쉽게 관리함
  • CQRS : Command Query Responsibility Segregation ; 시스템에서 명령과 조회를 명확하게 분리하여 복잡성을 관리
  • Event Sourcing : 상태 변화를 이벤트로 로깅하여, 상태를 재구성하거나 이력을 추적할 수 있게 함
  • Saga : 분산 트랜잭션을 여러 단계로 나누어, 각 단계를 독립적으로 실행하고 조정
  • Page Object : 웹 테스팅에서 사용되며, 각 웹 페이지를 객체로써 추상화하여 코드의 재사용성과 유지보수성을 높임

 

아키텍쳐 패턴 Architectural Patterns

소프트웨어의 전체 구조를 설계할 때 사용되는 고수준의 패턴

  • MVC : Model-View-Controller ; 사용자 인터페이스를 가진 애플리케이션에서 많이 사용됨
    애플리케이션을 모델, 뷰, 컨트롤러의 세부분으로 나눔
    일반적으로 아키텍처 패턴에 속하지만 특정 애플리케이션 도메인에 특화된 방식으로 적용될 수 있음
  • MVP : Model-View-Presenter : Presenter가 뷰와 모델 사이의 인터랙션을 관리함. 특히 안드로이드 개발 등에서 볼수있음
  • MVVM : Model-View-ViewModel ; 주로 클라이언트-사이드 애플리케이션에서 사용되는 구조적 패턴
    ViewModel 컴포넌트가 뷰와 모델 사이의 인터랙션을 관리함
  • Microservices : 작고 독립적으로 배포 가능한 서비스로 애플리케이션을 구성하는 패턴
    각각이 하나의 작은 기능을 수행하는 여러 서비스로 시스템을 분할하고, 이 서비스들은 독립적으로 배포하고 확장할 수 있음
  • Layered Architecture : 애플리케이션을 여러 레이어(예: 표현/비즈니스 로직/데이터 액세스 레이어 등)로 분리함
  • Client-Server : 클라이언트와 서버의 두 역할로 시스템을 나눔. 클라리언트는 서비스를 요청하고, 서버는 요청을 처리하여 응답함
  • Peer-to-Peer : 모든 노드가 동등한 관계를 유지하는 네트워크 구조. 노드 간에 자원을 직접 공유하며, 중앙 서버가 필요 없음
  • Event-Driven Architecture : 시스템을 이벤트 생성자와 이벤트 소비자로 분리함. 이벤트가 생성되면, 이를 처리할 수 있는 하나 이상의 컴포넌트가 이벤트를 소비함
  • 3-Tier / N-Tier : 애플리케이션을 여러 논리적 계츨(예프레젠테이션, 비즈니스 로직, 데이터)으로 분리하는 패턴
  • SOA : Service-Oriented Architecture ; 서비스를 중심으로 한 분산 아키텍쳐 패턴

 

모듈화 패턴 Sub-patterns

코드를 작은 단위로 분리하고 재사용성, 유지관리성, 이름 충돌의 방지 등을 목표로 함

여러 언어와 프레임워크에서 다양하게 사용됨

  • Revealing Module : 노출 모듈 패턴 ; 주로 JS에서 사용되는 패턴으로 클로저를 활용하여 프라이빗과 퍼블릭 멤버를 명시적으로 관리함
  • AMD : Asynchronous Module Definition ; 비동기 모듈 로딩을 지원함. RequireJS가 사용함
  • ES Modules : ECMAScript2015 (ES6)에서 표준으로 도입된 모듈 시스템으로 import와 export 구문을 사용함
  • Namespace : 네임스페이스 패턴 ; 하나의 전역 객체를 만들고 모든 모듈을 이 객체의 속성으로 추가하여 이름 충돌을 방지함
  • IIFE : immediately Invoked Function Expression ; 자바스크립트에서 모듈을 즉시 실행 함수로 감싸서 스코프를 제한함

 

반응형

'STUDY' 카테고리의 다른 글

JWT와 JWK의 차이  (0) 2023.07.25