Javascript/Node.js18 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. Proxy Pattern - 구조적 설계 패턴 프록시 (Proxy, Surrogate) "다른 객체에 대한 액세스를 제어" Subject라 하는 다른 객체에 대한 액세스를 제어하는 객체 (subject == original) 프록시와 subejct 는 동일한 인터페이스를 가지며 이를 통해 투명하게 하나를 다른것으로 바꿀 수 있음 실행 되는 작업의 전부 또는 일부를 가로채 해당 동작을 증강하거나 보완 프록시는 각 작업을 subject에 전달하여 추가적인 전/후 처리로 동작을 향상 * 클래스간의 프록시 아님, 대상의 실제 인스턴스를 감싸 내부 상태를 보존 유용한 상황 데이터 검증 : 입력의 유효성 검사 보안 : 클라이언트 권한 확인 캐싱 : 프록시로 내부에 캐시 유지 느린 초기화 : Subject 생성에 많은 비용이 들 경우 필요 시점까지 초기화 지연 .. 2022. 2. 6. 이전 1 2 3 다음