디자인 패턴이란?
프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록 하나의 규약 형태로 만들어 놓은 것
1. 싱글톤 패턴 (Singleton Pattern)
하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴
특징
- 주요 사용처: 데이터베이스 연결 모듈, 로깅 시스템 등
- 장점: 인스턴스 생성 비용 감소, 글로벌한 접근성 제공
- 단점: 의존성이 높아짐
- 해결책: 의존성 주입(DI, Dependency Injection)을 통해 모듈 간 결합을 느슨하게 만듦
- 장점:
- 애플리케이션 의존성 방향 일관
- 모듈 간 관계 명확
- 원칙: 상위 모듈과 하위 모듈 모두 추상화에 의존해야 하며, 구체적 구현에 의존하지 않아야 함
- 장점:
- 해결책: 의존성 주입(DI, Dependency Injection)을 통해 모듈 간 결합을 느슨하게 만듦
- 단점: 테스트 주도 개발(TDD) 시 독립적인 인스턴스를 생성하기 어려움
2. 팩토리 패턴 (Factory Pattern)
객체를 사용하는 코드에서 객체 생성 부분을 분리하고 추상화한 패턴
특징
- 유연성: 상위 클래스와 하위 클래스 분리
- 상위 클래스는 객체 생성 방식에 관여하지 않음
- 유지보수성: 객체 생성 로직이 독립적이라 코드 변경이 용이
활용 사례
- 데이터베이스 연결 객체 생성
- 다양한 종류의 UI 컴포넌트 생성
3. 전략 패턴 (Strategy Pattern)
정책 패턴(Policy Pattern)이라고도 불리며, 객체의 행위를 바꿀 때 직접 수정하지 않고 전략(캡슐화된 알고리즘)을 교체하여 동작을 변경하는 패턴
특징
- 알고리즘을 캡슐화하여 상호 교체 가능
- 런타임에 객체의 동작을 유연하게 변경 가능
활용 사례
- 결제 수단 변경 (카드, 페이팔 등)
- 경로 탐색 알고리즘 교체 (최단거리, 최적경로 등)
4. 옵저버 패턴 (Observer Pattern)
객체의 상태 변화를 관찰하여 변화가 있을 때 옵저버들에게 알리는 패턴
구성 요소
- 주체(Subject): 상태 변화를 관찰하는 객체
- 옵저버(Observer): 상태 변화에 따라 동작하는 객체
특징
- 이벤트 기반 시스템에 주로 사용
- MVC(Model-View-Controller) 패턴에서 활용됨
- React, Vue.js 같은 프레임워크에서 DOM 업데이트에 활용
JavaScript 구현
- 프록시 객체를 사용하여 구현 가능
- 프록시 객체: 속성 접근, 함수 호출 등 기본 동작을 가로채 제어
- 주요 메서드:
- get(target, prop): 속성 접근 가로채기
- set(target, prop, value): 속성 값 변경 가로채기
5. 프록시 패턴 & 프록시 서버
프록시 패턴
대상 객체에 접근하기 전 흐름을 가로채는 인터페이스 역할의 디자인 패턴
특징
- 객체 속성, 변환, 데이터 검증, 로깅, 캐싱 등에 사용
- 보안 강화 및 성능 최적화 가능
프록시 서버
클라이언트와 서버 사이에서 클라이언트 요청을 중계하며 간접적인 네트워크 접근을 제공
캐싱
- 장점: 원격 서버에 불필요한 요청 감소, 트래픽 절약
nginx 활용
- 비동기 이벤트 기반 구조로 다수의 연결 처리 가능
- Node.js 서버 앞단에서 부하 분산 및 보안 강화 역할
CloudFlare 활용
- CDN(Content Delivery Network)을 통해 콘텐츠 전달 속도 개선
- DDoS 공격 방어 및 HTTPS 구축 용이
6. 이터레이터 패턴 (Iterator Pattern)
이터레이터(iterator)를 사용하여 컬렉션의 요소들에 순차적으로 접근하는 디자인 패턴
특징
- 다양한 자료구조를 단일 인터페이스로 순회 가능
- 이터레이터 프로토콜: 반복 가능한 객체를 순회할 때 사용하는 규칙
활용 사례
- 배열, 리스트, 트리 구조 데이터 순회
7. 노출 모듈 패턴 (Revealing Module Pattern)
즉시 실행 함수(IIFE)를 통해 private, public 접근 제어자를 구현하는 패턴
특징
- JavaScript에서 기본적으로 접근 제어자가 없음을 보완
- 전역 변수 충돌 방지 및 초기화 코드 실행
접근 제어자의 구현
- Public: 클래스 외부에서 접근 가능
- Protected: 클래스와 자식 클래스에서만 접근 가능
- Private: 클래스 내부에서만 접근 가능
즉시 실행 함수 (IIFE)
- 함수 정의와 동시에 실행
- 초기화 코드 및 라이브러리 작성 시 사용
'디자인 패턴' 카테고리의 다른 글
| MVC & MVP & MVVM 패턴 삼형제에 대해 (0) | 2025.01.14 |
|---|