푸들푸들

[CS] 디자인 패턴 본문

SELF-STUDY/CS 전공지식 노트

[CS] 디자인 패턴

COCO_develop 2025. 5. 22. 16:59

1. 싱글톤 패턴

  •  1 class, 1 instance
  •  하나의 인스턴스를 만들어 놓고 해당 인스턴스를 다른 모듈들이 공유하며 사용
  •  인스턴스 생성 비용 ↓ but, 의존성 ↑
  •  TDD(Test Driven Development) 어려움 - 독립적이지 X
    •  -> 의존성 주입(DI, Dependency Injection) ≒ 디커플링
    • 메인 모듈과 하위 모듈 중간에 의존성 주입자 삽입 - 메인 모듈이 간접적으로 의존성 주입 -> 의존성 ↓

                   

2. 팩토리 패턴

  •  객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴
  •  상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴

 

3. 전략 패턴

  •  strategy pattern = 정책 패턴(policy pattern)
  •  객체의 행위를 바꿀 때, 직접 수정x -> 캡슐화한 알고리즘을 컨텍스트 안에서 수정
  •  passport: Node.js 인증 모듈을 구현할 때 쓰는 미들웨어 라이브러리, 여러가지 전략을 기반으로 인증

 

4. 옵저버 패턴

  •  주체가 어떤 객체의 상태 변화를 관찰하다가 상태 변화가 있을 때마다 메서드 등을 통해 옵저버 목록에 있는 옵저버들에게 변화를 알려주는 디자인 패턴 -> 주체 = 관찰자, 옵저버 = 추가 변화 사항이 생기는 객체
  •  옵저버 패턴을 활용한 서비스: 트위터 - 어떤 사람인 주체를 '팔로우' 했다면 주체가 포스팅을 하면 '팔로워'에게 알람이 감
  •  주로 이벤트 기반 시스템에 사용
  •  MVC 패턴에도 사용됨

 

5. 프록시 패턴

  •  대상 객체에접근하기 전 그 접근에 대한 흐름을 가로채 해당 접근을 필터링하거나 수정하는 등의 역할을 하는 계층이 있는 디자인 패턴
  •  객체의 속성, 변환 등을 보완
  •  보안, 데이터 검증, 캐싱, 로깅에 사용
  •  프록시 서버: 서버와 클라이언트 사이에서 클라이언트가 자신을 통해다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템, 응용 프로그램
    •  프록시 서버로 쓰는 CloudFlare
      •  웹 서버 앞단에 프록시 서버로 두어 DDOS 공격 방어, HTTPS 구축
      •  서비스 배포 후 의심스러운 트래픽 판단해 CAPTCHA 등을 기반으로 일정 부분 막아줌

 

6. 이터레이터 패턴

  •  이터레이터(iterator)를 사용하여 컬렉션의 요소들에 접근하는 디자인 패턴
  •  이레이터 프로토콜: 이터러블한 객체들을 순회할 때 쓰이는 규칙
  •  이터러블한 객체: 반복 가능한 객체로 배열을 일반화한 객체

 

7. 노출모듈 패턴

  •  revealing module pattern, 즉시 실행 함수를 통해 접근 제어자(private, public)를 만드는 패턴

 

8. MVC 패턴

  •   Model, View, Controller로 이루어진 디자인 패턴
  •  애플리케이션의 구성 요소를 세 가지 역할로 구분하여 개발 프로세스에서 각각의 구성 요소에만 집중 가능
  •  재사용성, 확장성 용이
  •  애플리케이션이 복잡해질수록 모델과 뷰의 관계가 복잡해짐
  •  MVC 패턴을 이용한 프레임워크: Spring
  •  모델: 애플리케이션의 데이터인 데이터베이스, 상수, 변수 등
  •  뷰: 사용자 인터페이스 요소, 모델을 기반으로 사용자가 볼 수 있는 화면
  •  컨트롤러: 하나 이상의 모델과 하나 이상의 뷰를 잇는 다리 역할, 메인 로직 담당, 모델과 뷰 생명주기 관리

 

9. MVP 패턴

  •  Model, View, Presenter로 이루어진 디자인 패턴, MVC 패턴으로부터 파생됨
  •  뷰, 프레젠터 = 1:1 -> MVC보다 더 강한 결합 

 

10. MVVM 패턴

  •  Model, View, View Model로 이루어진 디자인 패턴
    •  뷰 모델: 뷰를 더 추상화한 계층
  •  커맨드(command, 여러 가지 요소에 대한 처리를 하나의 액션으로 처리)와 바인딩(binding, 화면에 보이는 데이터와 웹 브라우저의 메모리 데이터를 일치시킴)을 가짐
  •  뷰와 뷰모델 사이의 양방향 데이터 바인딩을 지원
  •  UI를 별도의 코드 수정 없이 재사용 가능, 단위 테스팅 하기 쉬움
  •  MVVM 패턴을 가진 프레임워크: View.js

'SELF-STUDY > CS 전공지식 노트' 카테고리의 다른 글

[CS] 프로그래밍 패러다임  (0) 2025.05.23