반응형
반응형
❓프록시 패턴? 프록시(proxy)는 대리인, 대리자라는 뜻으로, 다른 객체의 접근 제어를 위한 구조 디자인 패턴입니다. 객체가 전달되는 중간 단계에 대리자를 위치시켜 무언가를 수행할 수 있도록 합니다. 하나의 객체를 두 개로 나눠 재구성하여, 실체 객체를 가로챌 수 있습니다. 여기서 특징은, 두 개로 나뉜 두 객체의 인터페이스는 같다는 것입니다. ❗프록시 패턴의 예시 (JS) // 실체 객체 class RealObject { performAction() { console.log("실체 객체 작동"); } } // 프록시 객체 class ProxyObject { constructor(realObject) { this.realObject = realObject; } performAction() { cons..
❓플라이웨이트 패턴? 플라이웨이트는 각 객체의 공통된 부분들을 공유하여 사용할 수 있도록 하는 디자인 패턴입니다. 이름의 뜻처럼, fly(가볍다) weigth(무게) 즉 무게를 가볍게 하는 것으로, 공유를 통해 자원을 효율적으로 사용할 수 있습니다! 여기서 자원은 메모리를 말하는데요, 여러 객체가 동일한 데이터를 가지고 있을 때 이를 같은 참조 값으로 공유함으로써 메모리를 줄일 수 있게 되는 것이죠! ❗플라이웨이트 패턴의 예시 (JS) // 플라이웨이트 패턴을 구현할 플라이웨이트 객체 (공유 객체) class TextStyle { constructor(font, size, color) { this.font = font; this.size = size; this.color = color; } } // 텍스..
❓파사드 패턴? 파사드 패턴이란, 복잡한 시스템, 서브 시스템을 단순한 인터페이스로 감싸, 클라이언트가 해당 시스템을 쉽게 사용할 수 있게 해주는 것을 말합니다. ‘싱글턴 추상 팩토리’ 라고 불리기도 합니다. 객체지향 개발 방식에서는 하나의 모듈을 작은 단위로 분리하고, 클래스로 캡슐화하며, 작게 분리된 모듈은 다른 기능 구현에도 재사용됩니다. 이 과정에서 수많은 클래스가 생성되고 객체는 복잡한 관계를 가지게 되는데요, 파사드 패턴을 이용해 이 복합한 객체 연결 구조 사이에 인터페이스를 두어서 시스템간 의존성 관리를 할 수 있고, 이는 느슨한 결합을 유지시켜줍니다. 파사드로 인해 새로운 계층이 추가되어, 객체 사이의 결합도를 낮추어 유연한 구조를 가질 수 있습니다. 특히 파사드 패턴은, 클라우드, 서비스..
❓장식자 패턴? 동적 기능을 추가하기 위해 구조를 개선하는 패턴입니다. 장식자 패턴은 어댑터 패턴과도 비슷한 개념입니다. 래퍼(Wrapper) 구조를 사용한다는 점에서 비슷한데요, 두 패턴의 목적성은 조금 다릅니다 어댑터 패턴 : 서로 다른 인터페이스의 통일 장식자 패턴 : 동적 기능을 추가함으로써 기능을 확장 이런 목적성을 가지는데요, 실제 프로그램에서는 딱 구분되는 것이 아니기 때문에 이렇구나 생각하고 넘어가겠습니다! 어댑터 패턴은 아래 글을 참고해주세요! [디자인 패턴] 어댑터(Adapter) 패턴 ❓어댑터 패턴? 어댑터 패턴은 구조 패턴으로, 다른 말로 래퍼(Wrapper) 패턴이라고도 합니다. 연관성 없는 2개의 객체를 묶어서 인터페이스를 만들어 주는 패턴을 말하는데요, 이를 통해 서로 연 lu..
❓복합체 패턴? 복합체 패턴은 구조 패턴의 하나로, 여러 개의 객체를 묶어 단일 객체처럼 동작하도록 하는 패턴입니다. 이 방식은 트리 구조를 형성하며, 복합 객체와 개별 객체가 동일한 인터페이스로 다뤄지기 때문에, 클라이언트 코드가 단순해진다는 특징이 있습니다! 복합체 패턴은 크게 4개의 구성 요소로 이루어 져 있습니다. Componet Composite Leaf Client 예시를 통해 알아보겠습니다! ❗복합체 패턴의 예시 (JS) // 1. Component (구성요소) 인터페이스 class FileSystemComponent { constructor(name) { this.name = name; } display() { throw new Error("이 메서드는 하위 클래스에서 구현되어야 합니다."..
❓브릿지 패턴? 브릿지 패턴은 구조 패턴의 하나로, 다른 용어로 핸들(Handle) 패턴, 구현부 패턴이라고 합니다. 객체의 확장성을 향상시키기 위한 패턴으로, 객체에서 동작을 처리하는 구현부와 확장을 위한 추상부로 분리하는 패턴을 말합니다. 구현부, 추상부로 분리하는 예시를 통해 확인해 봅시다. ❗브릿지 패턴의 예시 (JS) // 구현부 인터페이스 class Implementor { sendData(data) { throw new Error("오바리이딩 되지 않았습니다."); } } // 하위 구현부 클래스A class ConcreteImplementorA extends Implementor { sendData(data) { console.log("A 데이터를 보냅니다.", data); } } // 하..