본문 바로가기
개발/기타

[CS Study] 1. 디자인 패턴과 프로그래밍 패러다임 (1)

by 카펀 2022. 7. 24.

# 본 글은 인하대학교 단풍나무숲 CS 스터디 에 작성한 내용을 그대로 가져온 글입니다.

# 본 글은 내용상 부족하거나 미흡한 점이 많습니다.

디자인 패턴과 프로그래밍 패러다임(1)

목차

  1. 싱글톤 팩턴
  2. 팩토리 패턴
  3. 전략 패턴
  4. 옵저버 패턴
  5. 프록시 패턴과 프록시 서버
  6. 이터레이터 패턴
  7. 노출모듈 패턴

1. 싱글톤 패턴

  • 정의: 하나의 객체는 하나의 인스턴스만 가진다.
  • 객체를 미리 생성해 두고, 필요할 때 해당 객체를 가져다 쓴다
  • 장점:
    • 메모리 관리의 효율성 증가
    • 클래스 간의 데이터 공유가 쉽다
  • 단점:
    • 싱글톤 구현을 위한 코드 자체가 많이 필요하다
    • 테스트가 어렵다 (단위 테스트, TDD)
    • 클라이언트가 구체 클래스에 의존함
  • 관련 설명 링크: 우아한테크코스 - 싱글톤 패턴이란?

2. 팩토리 패턴

  • 객체 생성과 사용 부분을 떼어 내어 별도의 객체로써 생성하고 사용하는 것
  • 상위 클래스에서는 중요한 뼈대를 결정하고, 하위 클래스에서는 객체 생성에 관한 구체적인 내용을 결정
  • 예시: 상위 클래스에서는 커피에 필요한 필수요소만 가지고, 하위 클래스에서는 각 커피 종류에 대한 구체적인 내용이 결정됨
  • 장점:
    • 객체 간에 결합도를 낮출 수 있다 (느슨한 결합을 가진다).
    • 단일 책임 원칙 (Single Responsibility Principle)을 따른다.
    • 개방 폐쇄 원칙 (Open/Closed Principle)을 따른다.
    • 위 장점을 종합하여 유지 보수 상 유리함을 가진다.
  • 단점:
    • 패턴을 구현할 많은 서브 클래스를 구현함으로써 코드 양이 많아질 수 있다.
  • 관련 설명 링크:

3. 전략 패턴

  • 특정 객체의 행위를 직접 구현하지 않고, 캡슐화된 객체로 구현하여, 컨텍스트 내에서 상호 교체가 가능하도록 만드는 패턴
  • 예: 온라인 상에서 물건 구매를 위한 결제를 진행할 때, 결제 수단은 여러 가지가 존재하고, 그 중 어떤 것을 선택해도 성공적으로 결제가 진행된다.
  • 행위의 추가/삭제에 용이하며, 기존 로직을 건드리지 않는다.
  • 관련 설명 링크:

4. 옵저버 패턴

  • 상태 변화를 감지하는 관찰자 역할을 하는 객체가 존재하며, 변화가 발생하면 옵저버 목록에 있는 옵저버들에게 변화를 알려 주는 디자인 패턴
  • 특정 변화에 따른 동작이 미리 정의되어 있고, 변화가 발생하면 이러한 동작이 즉각 수행된다.
  • 이벤트 처리를 매우 효율적으로 구현할 수 있다.
  • 프록시 패턴이 적용되어 있는 디자인 패턴
  • 관련 링크:

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

  • 정의: 대상 객체에 접근하기 전, 그 접근에 대한 흐름을 가로채 대상 객체 앞단의 인터페이스 역할을 하는 자인 패턴
  • client -> web server 로의 요청이 client -> proxy server -> web server 와 같이, 중간에 하나의 계층이 더 생긴다
    • 중간에 위치하는 서버를 프록시 서버라고 한다.
    • 프록시 서버와 같이 중간에 흐름을 가로채는 역할을 두는 패턴을 프록시 패턴이라고 한다.
  • 무중단 배포를 위한 nginx 사용 예시
  • 502 Bad Gateway, 롤서버 먹통 'CloudFlare' 터졌다 - 프록시 서버에 장애가 생기면 웹 서버에도 접근할 수 없게 된다.

6. 이터레이터 패턴

  • 자료구조 상에서, 각기 다른 자료구조 구현체 (array, linked list, vector, set, ...)가 iterator라는 하나의 인터페이스를 통해 내부 자료를 순회할 수 있도록 하는 디자인 패턴

7. 노출모듈 패턴

  • 즉시 실행 함수를 통해 public, private, protected 와 같은 접근 제어자를 만드는 패턴
  • JavaScript는 언어 레벨에서 접근 제어자가 존재하지 않고, 전역 변위에서 스크립트가 실행된다.
  • 따라서 접근 제어가 필요한 경우, 노출 모듈 패턴을 활용하여 접근 제어자를 구현한다.

기타

  • 본 내용은 스터디의 첫 주에 진행한 내용의 일부이며, 스터디를 이제 막 시작하다 보니 내용 기록에 미흡함이 있습니다.

댓글