STUDY

디자인 패턴

Lim임 2026. 1. 6. 15:29
더보기

 

 

1. 싱글톤 패턴(singleton pattern)

하나의 클래스당 하나의 인스턴스만 만듦(데이터베이스 연결 모듈)

 

 

 

 

 

 

DB.instance라는 하나의 인스턴스를 기반으로
a,b를 생성할 수 있음
(인스턴스 생성 비용! 아낀다!)

 

 

 

 

 

예) Node.js MongoDB 연결할 때 쓰는 mongoose 모듈 connect() 함수

Node.js에서 MySQLDB 연결할 때도 싱글톤 패턴이 쓰임

 

단점)

1. TDD(Test Driven Development)할 때 걸림돌

 

TDD는 단위테스트를 주로 하는데, 단위테스트는 서로 '독립적'이어야하며 어떤 순서로든 실행할 수 있어야함

싱글톤 패턴은 미리 생성된 하나의 인스턴스를 기반으로 구현하기 때문에 '독립적인' 인스턴스를 만들기가 어렵다.

 

2. 의존성(종속성) 주입

모듈간의 결합을 강하게 만들 수 있다는 단점이 있다. 이때 의존성 주입(DI, Dependency Injection)을 통해 모듈 간의  

 

 

1. 싱글톤 패턴 (Singleton Pattern)

특징

  • 하나의 클래스당 하나의 인스턴스만 생성
  • 전역 상태처럼 공유됨
  • 데이터베이스 연결 모듈에 자주 사용됨

연관 예시

  • Node.js에서 MongoDB 연결 시 mongoose.connect()
  • Node.js MySQL 커넥션 풀
  • 서버 전역에서 하나의 DB 커넥션 유지

장점

  • DB 커넥션을 중복 생성하지 않아 리소스 절약
  • 전역에서 동일한 상태 보장

단점

  • TDD에서 테스트 간 독립성 보장 어려움
  • 상태가 공유되어 테스트 순서에 영향
  • 모듈 간 결합도가 높아짐

의존성 주입(DI)과의 관계

  • 싱글톤은 의존성을 내부에서 직접 생성하는 경우가 많음
  • DI를 사용하면 외부에서 주입받아 결합도를 낮출 수 있음

2. 팩토리 패턴 (Factory Pattern)

특징

  • 객체 생성 로직을 별도의 함수/클래스로 분리
  • new 키워드를 직접 사용하지 않음

자바스크립트에서

  • 함수 기반 팩토리
  • 조건에 따라 다른 객체 반환

자바에서

  • 인터페이스 + 구현 클래스 구조
  • Factory 클래스가 구현체 선택

장점

  • 객체 생성 책임 분리
  • 생성 방식 변경 시 사용부 수정 최소화
  • OCP(개방-폐쇄 원칙)에 유리

단점

  • 구조가 단순한 경우 오히려 복잡해질 수 있음
  • 클래스/파일 수 증가

3. 전략 패턴 (Strategy Pattern)

특징

  • 알고리즘을 캡슐화하여 교체 가능
  • 실행 중 전략 변경 가능

연관 예시

  • passport의 인증 전략
    • LocalStrategy
    • JwtStrategy
    • OAuth 전략

장점

  • 조건문(if/else) 제거
  • 새로운 전략 추가가 쉬움

단점

  • 전략 객체 수 증가
  • 구조를 이해해야 사용 가능

4. 옵저버 패턴 (Observer Pattern)

특징

  • 상태 변화 시 등록된 객체들에게 알림
  • 1:N 관계

연관 예시

  • 트위터: 팔로워가 게시글 업데이트 수신
  • MVC 패턴에서 Model → View 갱신

자바와의 관계

  • interface 기반 구현
  • implements로 Observer 구현
  • 상속보다 느슨한 결합

장점

  • 객체 간 결합도 낮음
  • 이벤트 기반 구조에 적합

단점

  • 옵저버가 많아지면 성능 이슈
  • 디버깅이 어려움

5. 프록시 패턴 & 프록시 서버

프록시 패턴 특징

  • 실제 객체 접근을 중간에서 제어
  • 접근 제어, 로깅, 캐싱 가능

프록시 서버 예시

  • Nginx
  • Cloudflare

연관 기능

  • DDoS 공격 방어
  • HTTPS 구축 (SSL 종료 지점)
  • CORS 제어
  • 캐싱

장점

  • 보안 강화
  • 성능 개선
  • 실제 서버 보호

단점

  • 지연(latency) 발생 가능
  • 설정 복잡

6. 이터레이터 패턴 (Iterator Pattern)

특징

  • 컬렉션 내부 구조를 몰라도 순회 가능

JS에서의 예시

  • for...of
  • Symbol.iterator
  • 배열, Map, Set

장점

  • 순회 로직 통일
  • 내부 구조 은닉

단점

  • 단순 배열에는 체감 이점 적음

7. 노출 모듈 패턴 (Revealing Module Pattern)

특징

  • private / public 구분
  • 즉시 실행 함수(IIFE) 기반

연관 개념

  • 캡슐화
  • 정보 은닉

장점

  • 외부에서 내부 상태 직접 접근 불가
  • 인터페이스 명확

단점

  • 테스트에서 private 접근 불가
  • 최신 ES Module에선 사용 빈도 감소

8. MVC 패턴 (Model - View - Controller)

특징

  • 역할 분리 중심 아키텍처

구성

  • Model: 데이터 & 비즈니스 로직
  • View: UI
  • Controller: 요청 처리

리액트와의 관계

  • 전통적 MVC는 아님
  • 컴포넌트가 View + Controller 역할 일부 수행

장점

  • 책임 분리 명확
  • 유지보수 용이

단점

  • Controller가 비대해질 수 있음

9. MVP 패턴 (Model - View - Presenter)

특징

  • View와 Model 완전 분리
  • Presenter가 모든 로직 담당

장점

  • 테스트 용이
  • View가 수동적

단점

  • Presenter 코드 증가
  • 구조 복잡

10. MVVM 패턴 (Model - View - ViewModel)

특징

  • View ↔ ViewModel 데이터 바인딩

연관 프레임워크

  • Vue
  • Angular

장점

  • UI 상태 관리 편리
  • View 로직 최소화

단점

  • ViewModel 비대화 가능
  • 데이터 흐름 추적 어려움

 

 

 

'STUDY' 카테고리의 다른 글

실전 오픈소스 기여 프로젝트  (0) 2026.01.07
프로그래밍 패러다임  (0) 2026.01.06
github  (0) 2025.12.26
MDN Web Docs  (0) 2025.12.25
오픈소스 기여도  (0) 2025.12.22