Skip to content

Latest commit

 

History

History
50 lines (37 loc) · 2.09 KB

전략 패턴.md

File metadata and controls

50 lines (37 loc) · 2.09 KB

🗺️ 전략 패턴 (strategy pattern)

어떤 동작을 하는 로직을 정의하고, 이것들을 하나로 묶어(캡슐화) 관리하는 패턴

  • 정책 패턴(policy pattern)이라고도 함

  • 객체의 행위를 바꾸고 싶은 경우 '직접' 수정하지 않고 전략이라고 부르는 '캡슐화한 알고리즘'을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 만드는 패턴

  • EX) 결제 방식의 '전략'만 바꿔서 두 가지 방식으로 결제하는 것을 구현한 코드

    • 어떤 아이템을 살 때 LUNACard로 사는 것과 KAKAOCard로 사는 것을 구현한 예제

👍🏻 장점

  • 로직을 독립적으로 관리하기 쉬움
  • 로직을 사용하는 객체들은 자기의 입맛에 맞게 로직을 효율적으로 수정할 수 있다.

🏘️ 예시

✏️ passport의 전략 패턴

  • 전략 패턴을 활용한 라이브러리로는 passport가 있음
  • passport는 Node.js에서 인증 모듈을 구현할 때 쓰는 미들웨어 라이브러리로, 여러 가지 '전략'을 기반으로 인증할 수 있게 함
  • 서비스 내의 회원가입된 아이디와 비밀번호를 기반으로 인증하는 LocalStrategy 전략과 페이스북, 네이버 등 다른 서비스를 기반으로 인증하는 OAuth 전략 등을 지원함
var passport = require("passport"),
  LocalStrategy = require("passport-local").Strategy;

passport.use(
  new LocalStrategy(function (username, password, done) {
    User.findOne({ username: username }, function (err, user) {
      if (err) {
        return done(err);
      }
      if (!user) {
        return done(null, false, { message: "Incorrect username." });
      }
      if (!user.validPassword(password)) {
        return done(null, false, { message: "Incorrect password." });
      }
      return done(null, user);
    });
  })
);
  • passport.use()라는 메서드에 '전략'을 매개변수로 넣어서 로직을 수행하는 것을 볼 수 있음

Reference