디자인패턴15 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. Wiring Pattern - 생성자 디자인 패턴 모듈 와이어링 (Wiring) 모든 어플리케이션은 여러 컴포넌트를 연결한 결과임 연결 방식은 프로젝트의 유지보수 및 성공에 중요함 컴포넌트 A가 주어진 기능을 수행하기 위해 컴포넌트 B가 필요. = A는 B에 종속적이다. = B는 A의 종속성 싱글톤 패턴과 종속성 주입 패턴을 사용하는 서로 다른 두 가지 접근방법을 사용해 종속성 모델링 하는 방법을 봅시다. 1. 싱글톤 종속성 두 모듈을 서로 연결하는 간단한 방법으로 모듈 시스템을 활용 종속성들을 묶는 방식은 사실상 싱글톤 Ex) DB 연결을 위한 싱글톤 인스턴스, 간단한 블로깅 어플 구현 // db.js import { dirname, join } from 'path'; import { fileURLToPath } from 'url'; import sq.. 2022. 2. 3. Singleton Pattern - 생성자 디자인 패턴 싱글톤(Singleton) "인스턴스가 하나만 존재하도록 접근을 중앙 집중화" 객체지향에서 가장 많이 사용 Node 에서 논의할 가치가 없지만 알아두면 좋음 Node개발자가 알아둬야 할 몇가지 주의사항과 제약사항 존재 상태 정보의 공유 리소스 사용의 최적화 리소스에 대한 접근 동기화 Ex) 데이터 베이스에 대한 접근을 제공하는 일반적인 DB 클래스 // Database.js export class Databse { constructor (dbName, connectionDetails) { // ... } // ... } 전형적인 구현은 일반적으로 연결풀 (connection pool)을 유지함 => 각 요청에 대해 새로운 DB 인스턴스를 만들 필요 없음 DB 인스턴스는 대기중인 트랜잭션 목록 같은 일부 .. 2022. 2. 3. Domenic Revealing Constructor Pattern - 생성자 디자인 패턴 공개 생성자? (Domenic Revealing Constructor Pattern) 일반적인 디자인 패턴 아님, JS 독자적임 https://blog.domenic.me/the-revealing-constructor-pattern/ The Revealing Constructor Pattern I want to document an interesting pattern we’ve seen emerge in some recent web platform specs, including promises and streams. I’m calling it the revealing constructor pattern. The Promises Example Let’s take the case of promis... bl.. 2022. 2. 3. 이전 1 2 3 다음