소프트웨어 설계에서 특정 문제를 효율적으로 해결하는 데에 자주 사용되는 설계 구조나 틀을 의미한다.
코드의 재사용성, 유지보수성, 읽기 쉬움 등을 향상시킬 수 있다.
디자인 패턴의 수는 고정되어 있지 않고, 다양한 패턴이 존대한다.
널리 알려진 건 "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 |
---|