반응형
옵저버(Observer) 패턴과 프록시(Proxy) 패턴
옵저버 패턴과 프록시 패턴은 소프트웨어 디자인 패턴 중에서 각각 관찰자 패턴과 프록시 패턴을 나타냅니다. 이 두 패턴은 각각 객체 간의 상호 작용과 객체에 대한 접근을 제어하는 데 유용합니다.
1. 옵저버(Observer) 패턴
옵저버 패턴은 객체 사이의 일 대 다 의존 관계를 정의하는 디자인 패턴입니다. 객체의 상태 변화가 발생하면 이를 관찰하는 다른 객체들에게 알림을 전달하여 상호 작용합니다.
핵심 내용:
- 주체(Subject) 객체와 여러 옵저버(Observer) 객체들로 구성됩니다.
- 주체 객체의 상태가 변경되면 옵저버들에게 이를 알리고 상태에 따라 각각의 옵저버가 업데이트됩니다.
- 느슨한 결합을 통해 객체 간의 상호 작용을 유연하게 관리할 수 있습니다.
예시:
class Subject {
constructor() {
this.observers = [];
}
addObserver(observer) {
this.observers.push(observer);
}
notify(message) {
this.observers.forEach(observer => observer.update(message));
}
}
class Observer {
update(message) {
console.log('Received message:', message);
}
}
const subject = new Subject();
const observer1 = new Observer();
const observer2 = new Observer();
subject.addObserver(observer1);
subject.addObserver(observer2);
subject.notify('Hello, observers!');
2. 프록시(Proxy) 패턴
프록시 패턴은 다른 객체에 대한 접근을 제어하거나 대리할 수 있는 객체를 제공하는 디자인 패턴입니다. 객체에 대한 접근을 제어하여 보안, 로깅, 캐싱 등의 추가 기능을 제공할 수 있습니다.
핵심 내용:
- 클라이언트는 실제 객체 대신 프록시 객체를 사용하여 객체에 접근합니다.
- 프록시 객체는 실제 객체에 대한 접근을 제어하고 필요한 경우 추가 기능을 수행합니다.
- 다양한 유형의 프록시가 있으며 필요에 따라 적절한 유형을 선택하여 사용할 수 있습니다.
예시:
class RealSubject {
request() {
console.log('RealSubject: Handling request.');
}
}
class Proxy {
constructor(realSubject) {
this.realSubject = realSubject;
}
request() {
if (this.checkAccess()) {
this.realSubject.request();
}
}
checkAccess() {
console.log('Proxy: Checking access.');
// Access control logic
return true;
}
}
const realSubject = new RealSubject();
const proxy = new Proxy(realSubject);
proxy.request();
반응형
'javascript pure > javascript 코어 개념' 카테고리의 다른 글
24. 함수형 프로그래밍(Functional Programming) - 3 (2) | 2024.02.17 |
---|---|
23. 함수형 프로그래밍(Functional Programming) - 2 (2) | 2024.02.17 |
22. 함수형 프로그래밍(Functional Programming) - 1 (0) | 2024.02.16 |
21. 디자인 패턴(Design Patterns) - 3 (0) | 2024.02.16 |
19. 디자인 패턴(Design Patterns) - 1 (0) | 2024.02.16 |
18. 메모리 관리(Memory Management) - 3 (0) | 2024.02.16 |
17. 메모리 관리(Memory Management) - 2 (0) | 2024.02.16 |
16. 메모리 관리(Memory Management) - 1 (0) | 2024.02.16 |