이 블로그는 광고 클릭 수익으로 운영됩니다!
괜찮으시다면 광고 차단을 풀어주세요 ㅠㅠ

게시글

강좌42 - JavaScript - 2년 전 등록

디자인 패턴(프록시, proxy)

조회수:
0
이 블로그는 광고 클릭 수익으로 운영됩니다!
괜찮으시다면 광고 차단을 풀어주세요 ㅠㅠ
이 블로그는 광고 클릭 수익으로 운영됩니다!
괜찮으시다면 광고 차단을 풀어주세요 ㅠㅠ

안녕하세요. 이번 시간에는 프록시 패턴에 대해 알아보겠습니다. 프록시는 대리인이라는 뜻입니다. 즉 사용자가 원하는 행동을 하기 전에 한 번 거쳐가는 단계를 뜻합니다. 좋은 프록시는 사용자의 요청을 캐싱하여 성능을 높일 수도 있고, 에러를 잡아낼 수도 있지만, 나쁜 프록시는 사용자의 요청을 왜곡하여 다른 동작을 하도록 만들 수도 있습니다. 양날의 검과 같습니다.

지난 시간의 이야기로 계속 예시를 들겠습니다. 로마를 점령한 갈바는 북독일 총독인 루푸스를 해임합니다. 루푸스는 예전에 갈바의 동맹인 빈덱스 총독을 죽인 전과가 있었습니다. 아마 그의 강력한 세력이 걱정됐나봅니다. 그 때문에 독일 지방에서의 민심을 잃게 됩니다. 오히려 갈바 자신이 임명했던 남독일 총독 비텔리우스가 민심을 얻습니다.

또 같이 싸웠던 오토 총독은 갈바에게 푸대접받자 이를 갈며 황제 근위대를 매수하기 시작합니다. 즉 근위대에 프록시를 심은 겁니다. 근위대는 이제 오토에게 보고를 하고 갈바에게는 거짓 보고를 하게 됩니다.

var Praetorian = (function() {
  function Praetorian() {};
  Praetorian.prototype.report = function(fact) {
    console.log('황제에게 ' + fact + '을 보고드립니다!');
  };
  Praetorian.prototype.assassinate = function(target) {
    console.log(target + ' 암살 명령을 받았습니다');
  };
  return Praetorian;
})();
var PraetorianProxy = (function() {
  function PraetorianProxy(master) {
    this.master = master;
    this.praetorian = new Praetorian();
  }
  PraetorianProxy.prototype.report = function(fact) {
    var lie = '거짓';
    console.log(this.master + '에게 ' + fact + '을 보고드립니다');
    this.praetorian.report(lie);
  }
  PraetorianProxy.prototype.assassinate = function(target) {
    console.log('더 이상 ' + target + '을 암살하지 않습니다');
    this.praetorian.assassinate('Galba');
  }
  return PraetorianProxy;
})();
var praetorian = new PraetorianProxy('Otho');
praetorian.report('사실'); // Otho에게 사실을 보고드립니다. 황제에게 거짓을 보고드립니다.
praetorian.assassinate('Otho'); // 더 이상 Otho을 암살하지 않습니다. Galba 암살 명령을 받았습니다.

갈바는 평소처럼 근위대에게 보고도 받고 오토를 견제하려고 암살 명령을 내리지만, 이미 근위대는 매수된 상태였습니다. 갈바는 거짓 보고를 받고 안심하다가 근위대에게 암살당하고 맙니다. 오토는 그 뒤를 이어 황제의 자리에 오릅니다. 하지만, 오토에게도 불운한 앞날이 기다리고 있었습니다...

위와 같이 프록시 패턴은 중간 단계를 거쳐 원래 객체로 도달하게 만드는 패턴입니다. 중간 단계에서는 아까 말했듯이 캐싱이나 에러 처리 같은 것을 할 수 있습니다. 사용하는 것은 여러분의 자유입니다. 물론 오토와 같이 누군가를 해치는데 쓰지는 않겠죠?

다음 시간에는 명령 패턴에 대해서 알아보겠습니다.

목록
투표로 게시글에 관해 피드백을 해주시면 많은 도움이 됩니다. 오류가 있다면 어떤 부분에 오류가 있는지도 알려주세요! 잘못된 정보가 퍼져나가지 않도록 도와주세요.
Copyright © 2016- 무단 전재 및 재배포 금지

댓글

아직 댓글이 없습니다.