본문 바로가기

전체 글62

Iterator Pattern - 행위 디자인 패턴 반복자 (Iterator) 매우 중요하고 일반적으로 사용됨 언어는 어떤 방식으로든 이 패턴을 구현함 배열, 트리 구조와 같은 컨테이너 요소들을 반복하기 위한 공통 인터페이스 또는 포로토콜을 정의 배열은 단순한 루프 필요 트리는 순회 알고리듬 필요 반복자 패턴 사용 시 알고리듬 또는 데이터 구조에 대한 세부정보는 숨기고 모든 유형의 컨테이너를 반복하는데 필요한 공통의 인터페이스를 제공 => 순회 연산의 결과를 처리하는 방식과 순회 안고리듬의 구현을 분리할 수 있음 JS 에서 반복자는 이벤트 이미터와 스트림처럼 반드시 컨테이너일 필요가 없음 다른 유형의 구조에서도 잘 동작 1. 반복자 iterator 프로토콜 = 반환되는 전체가 반복을 위한것 상속 X, 형식적 구조 X, 프로토콜을 통해 구현됨 => 사전에 .. 2022. 2. 14.
Template Pattern - 행위 디자인 패턴 템플릿 (Template) 전략패턴과 공통점이 많음 템플릿 패턴 : 컴포넌트의 스켈레톤(공통부분을 나타냄) 을 구현하는 추상 클래스를 정의함 다만 일부 단계는 정의되지 않은 상태로 존재 하위 클래스는 템플릿 함수라고하는 누락된 함수부분을 구현하여 컴포넌트의 빈 부분을 채움 목적: 모든 컴포넌트의 모든 변형 집합을 정의할 수 있도록 하는것 ! JS 는 추상 클래스를 정의하는 공식적인 방법이없음. 함수를 정의하지 않은 상태로 두거나 항상 예외를 발생시키는 함수에 할당하여 함수를 구현해야 함 템플릿과 전략 패턴은 매우 유사함, 중요한 차이점은 구조와 구현에 있음 둘다 공통 부분을 재사용하면서 구성 요소의 가변 부분을 변경할 수있음 전략 : 실행 시 동적으로 수행 템플릿 : 구체적인 클래스가 정의되는 순간, 전.. 2022. 2. 9.
State Pattern - 행위 디자인 패턴 상태 (State) "컨텍스트의 상태에 따라 전략이 변경되는 패턴" 전락 : 환경설정의 속성 또는 입력 인자와 같은 변수에 따라 전략을 선택하는 방법 => 한번 생성된 컨텍스트에서는 전략이 변경되지 않은 상태로 유지됨 상태 : 전략은 동적이며 컨텍스트의 생존 주기동안 변경 될 수 있음 => 서로 다른 컨텍스트상태에서 서로 다른 전략을 선택 Ex) 예약 시스템 -예약 처음 생성시 사용자가 예약을 확인 할 수 있음, 예약하지 않았기 떄문에 예약 O, 취소 X, 구매 이전 삭제 O -예약 완료 시 취소 O, 삭제 X -예약일 전날 취소 X, 너무 늦음 패턴을 활용하여 한 동작에서 다른 동작으로 쉽게 전환 가능 각각의 상태 변경에 따라 다른 전략이 필요함 상태 전략은 유연성과 디커플링 측면에서 최상의 결과를 제.. 2022. 2. 9.
Strategy Pattern - 행위 디자인 패턴 전략 (Strategy) 컨텍스트라는 객체를 활성화 => 변수를 "전략" 이라는 별도의 상호 교환 가능한 객체로 추출 컨텍스트 : 알고리듬 제품군의 공통적인 로직 구현 전략 : 가변적인 부분을 구현, 컨텍스트가 값에 따라 다양한 요소에 따라 동작을 조정하도록 함 교체 가능한 부품이라고 생각하면 편함. 즉, 구조에따라 다른 전략(부품)으로 바꿔 사용 우려되는 사항을 분리하는데 도움 더 나은 유연성 제공 복잡한 조건문, 동일한 역할의 범위 내 다른 컴포넌트를 혼합 시 유용 Ex) 결제 시스템 - pay() 함수에서 if else 문을 사용하여 선택한 지불 옵션에 따라 작업을 완료 - 지불 처리를 사용자가 선택한 결제 게이트웨이 로직을 구현한 전략 객체에 위임함 전략 패턴 사용시 무제한의 결제 방법을 지원, .. 2022. 2. 9.
Adaptor Pattern - 구조적 설계 패턴 어댑터 (Adaptor) "다른 인터페이스와 호환가능하도록 인터페이스를 변환" 어댑터의 작업이 다른 객체에 대한 하나 이상의 함수 호출로 구성 일반적으로 "컴포지션"을 사용 다른 객체의 함수로 연결을 제공 1. 파일 시스템 API 로 LevelUP 사용하기 LevelUp API 중심으로 어댑터를 만들어 기본 fs 모듈과 호환되는 인터페이스로 변환 readFile(), writeFile() 호출을 db.get(), db.put() 으로 변환시킬거임 일단, 팩토리를 export 하는것으로 시작하겠습니다. import {resolve} from 'path'; export function createFSAdapter (db) { return ({ readFile (filename, options, callbac.. 2022. 2. 9.
Decorator Pattern - 구조적 설계 디자인 데코레이터 (Decorator) "기존 객체의 동작을 동적으로 증대시키는 것으로 구성된 구조적 디자인 패턴" 동작이 해당 클래스의 모든 객체에 적용되지 않음 데코레이팅 될 경우 인스턴스에만 추가됨 => 클래스의 상속과는 다름 프록시 패턴과 매우 유사. 개선 대신 새로운 기능으로 확장을 함 1. 데코레이터 구현 기법 프록시와 데코레이터는 동일한 구현 전략 이전의 StackCalculator에서 add() 새 함수 노출, divide() 함수 호출 가로채 0으로 나누는지 검사 1-1. 컴포지션 컴포지션 사용 시 대상 컴포넌트는 이를 상속한 새로운 객체로 감싸 사용 원래 컴포넌트에 위임하면서 새로운 함수를 정의함 class EnhancedCaculator { consturctor (calculator) { t.. 2022. 2. 9.