디자인패턴5 퍼사드 패턴(Facade Pattern) headfirst 디자인 패턴책을 공부하고 정리한 것 입니다. 개요 당연하게도 이 패턴을 왜 사용하는지에 대해 아는 것이 정말 중요하다고 볼 수 있습니다. 퍼사드 패턴 정의는 다음과 같습니다. 퍼사드 패턴은 서브시스템들의 통합된 인터페이스를 제공한다. 간단하게 말해서 퍼사드 패턴은 단순화된 인터페이스를 통해 서브시스템을 더 쉽게 사용할 수 있도록 하기 위한 용도입니다. 말로만 떠들어서는 역시 뭔지 알 수 없습니다. 코드를 봅시다. 등운동을 하는 코드를 작성해 보겠습니다. 운동 순서는 다음과 같습니다. 1. 스트레칭을 몇분동안 한다. 2. 풀업을 한다. 3. 시티드 로우를 한다. 4. 유산소 달리기를 한다. 다음과 같이 작성할 수 있습니다. this.stretching.stretch(10);// 스트레칭 .. 2022. 2. 4. 팩토리 패턴1 (factory pattern) firsthead 책을 공부하고 요약한 것입니다. new는 구상객체다. new 지시자는 구상클래스의 인스턴스를 만드는것. new는 나중에 코드를 수정할 가능성이 높아지며 유연성이 떨어진다. // 인터페이스를 Animal을 사용하였지만 new 지시자를 이용해 구상클래스 생성 Animal dog = new Dog(); 다음과 같이 코드를 짜야할 순간이 있다. if(dogType === 'Maltese'){ dog = new Maltese(); }else if(dogType === 'Pomeranian'){ dog = new Pomeranian(); }else if(dogType === 'ShihTzu'){ dog = new ShihTzu(); } 이런 코드는 만들어지는 인스턴스 형식은 실행시 주어진 로직에 .. 2021. 9. 24. 전략패턴 (Strategy Pattern ) headfirst 디자인 패턴책을 공부하고 정리한 것 입니다. 문제점 abstract class IronMan { public fly():void{ console.log('fly'); } public abstract showInfo():void; } class Mark2 extends IronMan{ public showInfo(){ console.log('i am mark2 suit'); } } 추상 클래스 아이언맨을 상속받아 여러가지 서브 버전을 생성할 수 있습니다. mark2 뿐만아니라 더 확장해 나갈 수 있져. 그러던 어느날 레이저 공격 기능을 추가하고 싶었습니다. public lazerAttack():void{ console.log('lazerattack'); } 다음의 함수를 작성하고 추상클래.. 2021. 9. 21. 데코레이터 패턴(Decorator Pattern) abstract class IceCreame{ public abstract getTaste():void; } class Vanilla extends IceCreame{ public getTaste():void { console.log('바닐라 아이스크림'); } } abstract class IceCreameDecorator extends IceCreame{ private iceCreame : IceCreame; constructor(ic: IceCreame){ super(); this.iceCreame = ic; } public getTaste():void{ this.iceCreame.getTaste(); } } class ChocoDecorator extends IceCreameDecorator{ c.. 2021. 9. 21. 싱글톤 패턴 (singleton pattern) 싱글톤 패턴은 메모리 위에서 인스턴스가 하나임을 보장하는 디자인 패턴이다. 장점 1. 하나의 인스턴스를 보장함으로 메모리 리소스 절약 2. db 커넥션 및 로그 등 사용 단점 1. 멀티 쓰레드 , 멀티 프로세스 상황에서의 동시성 이슈 2. 하나의 인스턴스가 많은 작업을 할 경우 간단하게 싱글톤을 구현해보자 class Single { private static instance : Single; private readonly name :string; private constructor(n:string){ this.name = n; } public static getInstance(){ if(!Single.instance){ Single.instance = new Single('king'); } return .. 2021. 9. 16. 이전 1 다음