디자인 패턴

디자인 패턴 일곱 난쟁이

king-koopa 2025. 1. 14. 04:02

디자인 패턴이란?

프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록 하나의 규약 형태로 만들어 놓은 것


1. 싱글톤 패턴 (Singleton Pattern)

하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴

특징

  • 주요 사용처: 데이터베이스 연결 모듈, 로깅 시스템 등
  • 장점: 인스턴스 생성 비용 감소, 글로벌한 접근성 제공
  • 단점: 의존성이 높아짐
    • 해결책: 의존성 주입(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