class Singleton {
constructor() {
if(!Singleton.instance) {
Singleton.instance = this
}
return Singleton.instance
}
getInstance() {
return this.instance
}
}
const a = new Singleton()
const b = new Sintleton()
console.log(a === b) // true
// 데이터베이스 연결 모듈
const URL = "mongodb://localhost:27017/kundolapp"
const createConnection = url => ({"url": url})
class DB {
constructor(url) {
if (!DB.instance) {
DB.instance = createConnection(url)
}
return DB.instance
}
connect() {
return this.instance
}
}
const a = new DB(URL)
const b = new DB(URL)
console.log(a === b) // true
상위 클래스가 중요한 뼈대를
결정하고, 하위 클래스에서 객체 생성에 관한 구체적
인 내용을 결정하는 패턴느슨한 결합
을 가짐class Latte {
constructor() {
this.name = "latte"
}
}
class Espresso {
constructor() {
this.name = "Espresso"
}
}
class LatteFactory {
static createCoffee() {
return new Latte()
}
}
class EspressoFactory {
static createCoffee() {
return new Espresso()
}
}
const factoryList = { LatteFactory, EspressoFactory }
class CoffeeFactory {
// 정적 메서드
// 정적 메서드를 쓰면 클래스의 인스턴스 없이 호출이 가능 (메모리 절약)
// 개별 인스턴스에 묶이지 않으면 클래스 내의 함수를 정의할 수 있는 장점이 있음
static createCoffee(type) {
const factory = factoryList[type]
return factory.createCoffee()
}
}
const main = () => {
// 라떼 커피를 주문한다.
const coffee = CoffeeFactory.createCoffee("LatteFactory");
// 커피 이름을 부른다.
console.log(coffee.name) // latte
}
main()
컨텍스트
- 상황, 맥락, 문맥을 의미
- 개발자가 어떠한 작업을 완료하는 데 필요한 모든 관련 정보를 말함
상태 변화
가 있을 때마다 메서드 등을 통해 옵저버 목록에 있는 옵저버들에게 변화를 알려주는 디자인 패턴관찰자
"추가 변화 사항"이 생기는 객체들
을 의미데이터 바인딩
화면에 보이는 데이터와 웹 브라우저의 메모리 데이터를 일치시키는 기법