# 본 글은 인하대학교 단풍나무숲 CS 스터디 에 작성한 내용을 그대로 가져온 글입니다.
# 본 글은 내용상 부족하거나 미흡한 점이 많습니다.
디자인 패턴과 프로그래밍 패러다임(1)
목차
- 싱글톤 팩턴
- 팩토리 패턴
- 전략 패턴
- 옵저버 패턴
- 프록시 패턴과 프록시 서버
- 이터레이터 패턴
- 노출모듈 패턴
1. 싱글톤 패턴
- 정의: 하나의 객체는 하나의 인스턴스만 가진다.
- 객체를 미리 생성해 두고, 필요할 때 해당 객체를 가져다 쓴다
- 장점:
- 메모리 관리의 효율성 증가
- 클래스 간의 데이터 공유가 쉽다
- 단점:
- 싱글톤 구현을 위한 코드 자체가 많이 필요하다
- 테스트가 어렵다 (단위 테스트, TDD)
- 클라이언트가 구체 클래스에 의존함
- 관련 설명 링크: 우아한테크코스 - 싱글톤 패턴이란?
2. 팩토리 패턴
- 객체 생성과 사용 부분을 떼어 내어 별도의 객체로써 생성하고 사용하는 것
- 상위 클래스에서는 중요한 뼈대를 결정하고, 하위 클래스에서는 객체 생성에 관한 구체적인 내용을 결정
- 예시: 상위 클래스에서는 커피에 필요한 필수요소만 가지고, 하위 클래스에서는 각 커피 종류에 대한 구체적인 내용이 결정됨
- 장점:
- 객체 간에 결합도를 낮출 수 있다 (느슨한 결합을 가진다).
- 단일 책임 원칙 (Single Responsibility Principle)을 따른다.
- 개방 폐쇄 원칙 (Open/Closed Principle)을 따른다.
- 위 장점을 종합하여 유지 보수 상 유리함을 가진다.
- 단점:
- 패턴을 구현할 많은 서브 클래스를 구현함으로써 코드 양이 많아질 수 있다.
- 관련 설명 링크:
- 팩토리 패턴(Factory Pattern)
- 나무위키: 디자인 패턴 - 팩토리 패턴 쪽 예시 코드 참고
3. 전략 패턴
- 특정 객체의 행위를 직접 구현하지 않고, 캡슐화된 객체로 구현하여, 컨텍스트 내에서 상호 교체가 가능하도록 만드는 패턴
- 예: 온라인 상에서 물건 구매를 위한 결제를 진행할 때, 결제 수단은 여러 가지가 존재하고, 그 중 어떤 것을 선택해도 성공적으로 결제가 진행된다.
- 행위의 추가/삭제에 용이하며, 기존 로직을 건드리지 않는다.
- 관련 설명 링크:
4. 옵저버 패턴
- 상태 변화를 감지하는 관찰자 역할을 하는 객체가 존재하며, 변화가 발생하면 옵저버 목록에 있는 옵저버들에게 변화를 알려 주는 디자인 패턴
- 특정 변화에 따른 동작이 미리 정의되어 있고, 변화가 발생하면 이러한 동작이 즉각 수행된다.
- 이벤트 처리를 매우 효율적으로 구현할 수 있다.
- 프록시 패턴이 적용되어 있는 디자인 패턴
- 관련 링크:
- 옵저버 패턴 개념 떠먹여드립니다
- Vue.js에서 데이터 변화를 감지하는 방법 - Vue는 데이터가 변경되면 페이지를 자동으로 갱신하는데, 이 때 옵저버 패턴이 사용된다.
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는 언어 레벨에서 접근 제어자가 존재하지 않고, 전역 변위에서 스크립트가 실행된다.
- 따라서 접근 제어가 필요한 경우, 노출 모듈 패턴을 활용하여 접근 제어자를 구현한다.
기타
- 본 내용은 스터디의 첫 주에 진행한 내용의 일부이며, 스터디를 이제 막 시작하다 보니 내용 기록에 미흡함이 있습니다.
'개발 > 기타' 카테고리의 다른 글
[CS Study] 2. 네트워크 (1) (0) | 2022.08.08 |
---|---|
[CS Study] 1. 디자인 패턴과 프로그래밍 패러다임 (2) (0) | 2022.08.01 |
Windows WSL 환경에서 Homebrew 설치하기 (0) | 2022.02.16 |
Java에서 메소드의 parameter가 배열일 때 생기는 의문 (0) | 2022.01.23 |
IntelliJ 단축키 / 구문 정리 (0) | 2022.01.22 |
댓글