디자인 패턴 - 구조 패턴(프록시)
⭐프록시 패턴
어떤 대리 객체를 두고 역할을 대체 수행시키는 패턴입니다. 대신한다가 가장 중요합니다. 클라이언트는 대신 프록시가 실제 서비스객체인지는 알수 없습니다.
실제 적용 예시
- 신용카드는 결재를 한다는 인터페이스는 동일하지만 이전에 신용이라는 기능을 통해 다양한 중간 과정을 관리합니다.
export interface Subject {
doAction(): void;
}
export class Proxy implements Subject {
private realSubject: RealSubject;
private s: string;
constructor(s: string) {
this.s = s;
}
public doAction(): void {
console.log("`doAction` of Proxy(", this.s, ")");
if (this.realSubject === null || this.realSubject === undefined) {
console.log("creating a new RealSubject.");
this.realSubject = new RealSubject(this.s);
}
this.realSubject.doAction();
}
}
export class RealSubject implements Subject {
private s: string;
constructor(s: string) {
this.s = s;
}
public doAction(): void {
console.log("`doAction` of RealSubject", this.s, "is being called!");
}
}
언제 사용할까 ?
본레 서비스 객체에 영향을 끼치지 않고 새로운 기능을 중간에 끼여 넣을 수 있고, 클라이언트는 그것에 대해서 몰라도 되는 서비스를 캡슐화 하는것에 쓰면 좋흡니다.
장점
- 프록시는 캐싱등을 활용해 서비스 성능 향상에 도움을 준다.
- 전처리 과정을 통해 복잡함을 줄인다.
단점
- 전처리 과정이 불필요하더라도 거치게 된다.
- 프록시 내부에서 스레드를 생서하거나 동기화 로직이 있는경우 모든 서비스가 느려질수 있다.