게시글

5만명이 선택한 평균 별점 4.9의 제로초 프로그래밍 강좌! 로드맵만 따라오면 됩니다! 클릭
강좌48 - JavaScript - 8년 전 등록 / 6년 전 수정

디자인 패턴(전략, strategy)

안녕하세요. 자바스크립트 디자인 패턴 마지막 시간입니다. 사실 디자인 패턴은 몇 종류가 더 있지만, 거의 안 쓰이기 때문에 과감하게 생략하였습니다. 마지막으로 배울 패턴은 전략 패턴입니다.

도나우 군단과 무키아누스의 지지를 받는 베스파시아누스는 이제 로마로 진격합니다. 로마로 가는 방법은 여러 가지가 있습니다. 이스라엘에서 지중해를 통해 배로 이탈리아로 가거나, 터키를 거쳐서 육로로 갈 수 있습니다. 또 수도를 공략하는 방법도 여러가지가 있겠죠. 지도자라면 상관에 맞게 전략전술을 수정할 수 있어야합니다. 여러가지 전술을 빠르게 변경할 수 있는 디자인 패턴입니다.

var Strategy = (function() {
  function Strategy() {
    this.strategy = null;
  }
  Strategy.prototype.setStrategy = function(strategy) {
    this.strategy = strategy;
  };
  Strategy.prototype.execute = function() {
    this.strategy.execute();
  };
  return Strategy;
})();
var ShipStrategy = (function() {
  function ShipStrategy() {}
  ShipStrategy.prototype.execute = function() {
    console.log('배로 이탈리아에 갑니다');
  };
  return ShipStrategy;
})();
var LandStrategy = (function() {
  function LandStrategy() {}
  LandStrategy.prototype.execute = function() {
    console.log('육로로 이탈리아에 갑니다');
  };
  return LandStrategy;
})();
var strat = new Strategy();
var ship = new ShipStrategy();
var land = new LandStrategy();
strat.setStrategy(ship);
strat.setStrategy(land); // 전략을 바꿈
strat.execute(); // 어떤 전략이든 설정된 것을 실행
// 육로로 이탈리아에 갑니다.

전략을 설정하는 부분 따로, 실행하는 부분 따로라서, 전략을 설정해두면 실행하기 전에 자유롭게 전략을 바꿀 수 있습니다. 실행한 후에도 바꿀 수 있고요. 이렇게 베스파시아누스는 육로로 진격하여 비텔리우스의 대장군 카이키나를 무찌르고 수도를 점령합니다. 비텔리우스는 베스파시아누스에게 평화적으로 황제를 양위하려다가 실패하여 도나우 군단에게 살해당합니다. 베스파시아누스는 네로 사후 혼란스러웠던 로마를 정비하고 황제의 권위를 다시 세우는 데 노력합니다.

한가지 재밌는 점은 베스파시아누스는 죽을 때 "내가 신이 되어가는구나"라고 말하며, 황제는 서서 죽어야한다고 반쯤 일어서서 죽었습니다. 로마 이야기도 재밌는 것들이 많으니 책을 한 번 읽어보세요!

이상으로 로마 이야기와 함께 한 자바스크립트 디자인 패턴 강좌를 마치겠습니다. 다음 시간에는 자바스크립트에서 알아두면 유용한 문법적 요소인 syntactic sugar에 대해 알아보겠습니다.

조회수:
0
목록
투표로 게시글에 관해 피드백을 해주시면 게시글 수정 시 반영됩니다. 오류가 있다면 어떤 부분에 오류가 있는지도 알려주세요! 잘못된 정보가 퍼져나가지 않도록 도와주세요.
Copyright 2016- . 무단 전재 및 재배포 금지. 출처 표기 시 인용 가능.
5만명이 선택한 평균 별점 4.9의 제로초 프로그래밍 강좌! 로드맵만 따라오면 됩니다! 클릭

댓글

2개의 댓글이 있습니다.
6년 전
ShipStrategy, LandStrategy에 () 빠졌습니다.
6년 전
감사합니다~
6년 전
Strategy 생성자 안에 strategy 오타가 있네요.(3번째 줄. 8번째 줄) 그리고 생성자 안에 프로토타입 setStrategy 메서드 선언시, 표현식도 아닌 선언식도 아닌 것이 들어가 있습니다...
6년 전
앗 감사합니다. 수정했습니다~