320x100
320x100

디자인 패턴의 3가지 유형

- Creational

: 객체 인스턴스 생성

 

- Structual

: 객체 설계 방식

 

- Behavioural

: 객체가 상호 작용하는 방식

 

 

 

Singleton

: 클래스의 단일 인스턴스만을 원할 때 사용하는 패턴

: node.js에서는 module caching system을 이용하여 캐시된 내용을 바로 쓸 수 있어 싱글턴 패턴을 구현할 수 있음

class DatabaseConnection {
  constructor() {
    this.databaseConnection = 'dummytext'
  }

  getNewDBConnection() {
    return this.databaseConnection
  }
}

module.exports = new DatabaseConnection()

 

 

 

 

 

Factory

: 객체를 생성하는데 사용되는 인터페이스 또는 추상 클래스를 정의

: 이렇게 생성된 인터페이스 및 추상클래스를 사용하여 다른 객체를 초기화

: 기존 코드를 손상시키지 않더라도 새 객체를 응용프로그램에 사용 가능

: 인스턴스 생성과 관련된 모든 코드가 한 곳에 있으므로 코드를 더 잘 꾸밀 수 있음

import Motorvehicle from './Motorvehicle'
import Aircraft from './Aircraf'
import Railvehicle from './Railvehicle'

const VehicleFactory = (type, make, model, year) => {
  if (type === car) {
    return new Motorvehicle('car', make, model, year)
  } else if (type === airplane) {
    return new Aircraft('airplane', make, model, year)
  } else if (type === helicopter) {
    return new Aircraft('helicopter', make, model, year)
  } else {
    return new Railvehicle('train', make, model, year)
  }
}

module.exports = VehicleFactory
// 첫번째 매개변수에서 타입을 지정하고, 나머지는 그대로 변수를 넘긴다.
const audiAllRoad = VehicleFactory('car', 'Audi', 'A6 Allroad', '2020')

 

 

 

 

 

Builder

: 객체 구조와 객체를 분리 할 수 있는 패턴

: 복잡한 객체를 생성하는 코드를 단순화

class Car {
  constructor(make, model, year, isForSale = true, isInStock = false) {
    this.make = make
    this.model = model
    this.year = year
    this.isForSale = isForSale
    this.isInStock = isInStock
  }

  toString() {
    return console.log(JSON.stringify(this))
  }
}

class CarBuilder {
  constructor(make, model, year) {
    this.make = make
    this.model = model
    this.year = year
  }

  notForSale() {
    this.isForSale = false

    return this
  }

  addInStock() {
    this.isInStock = true

    return this
  }

  build() {
    return new Car(
      this.make,
      this.model,
      this.year,
      this.isForSale,
      this.isInStock,
    )
  }
}

module.exports = CarBuilder
const CarBuilder = require('./CarBuilder')

const bmw = new CarBuilder('bmw', 'x6', 2020).addInStock().build()
const audi = new CarBuilder('audi', 'a8', 2021).notForSale().build()
const mercedes = new CarBuilder('mercedes-benz', 'c-class', 2019).build()

 

 

 

 

Prototype

: 모든 객체가 어떤 객체를 상속하는 패턴

: 자바스크립트는 프로토타입 기반 언어임

: 프로토타입에 정의된 함수는 모든 새 클레스에서 상속 됨

: 샠 ㅡㄹ래스는 개별 복사본을 갖는 대신 동일한 기능을 가짐

const atvPrototype = {
  mud: () => {
    console.log('Mudding')
  },
}

function Atv(make, model, year) {
  function constructor(make, model, year) {
    this.make = make
    this.model = model
    this.year = year
  }

  constructor.prototype = atvPrototype

  let instance = new constructor(make, model, year)
  return instance
}

const atv1 = Atv()
const atv2 = Atv('Honda', 'Rincon 650', '2018')
300x250
728x90