[javascript] 자바스크립트의 디자인 패턴(Design Pattern): 싱글톤, 팩토리, 옵저버 등
자바스크립트는 다양한 디자인 패턴을 활용하여 코드를 구조화하고 유지보수성을 높일 수 있습니다. 이 게시글에서는 자바스크립트의 대표적인 디자인 패턴인 싱글톤(Singleton), 팩토리(Factory), 그리고 옵저버(Observer)에 대해 살펴보겠습니다.
1. 싱글톤(Singleton) 디자인 패턴
싱글톤은 단 하나의 인스턴스를 생성하고, 어디서든지 해당 인스턴스에 접근할 수 있도록 하는 패턴입니다. 이를 통해 중복된 객체 생성을 방지하고 메모리를 절약할 수 있습니다.
class Singleton {
constructor() {
if (Singleton.instance) {
return Singleton.instance;
}
this.data = "Singleton Instance";
Singleton.instance = this;
}
}
const instance1 = new Singleton();
const instance2 = new Singleton();
console.log(instance1 === instance2); // true
console.log(instance1.data); // "Singleton Instance"
console.log(instance2.data); // "Singleton Instance"
2. 팩토리(Factory) 디자인 패턴
팩토리는 객체 생성을 캡슐화하여 클라이언트가 객체를 직접 생성하는 것이 아닌, 팩토리에 의해 생성되도록 하는 패턴입니다. 이를 통해 객체 생성 로직을 별도로 분리하여 유연성을 확보할 수 있습니다.
class Product {
constructor(type) {
this.type = type;
}
}
class ProductFactory {
createProduct(type) {
return new Product(type);
}
}
const factory = new ProductFactory();
const productA = factory.createProduct('A');
const productB = factory.createProduct('B');
console.log(productA.type); // "A"
console.log(productB.type); // "B"
3. 옵저버(Observer) 디자인 패턴
옵저버는 객체간의 일대다 의존 관계를 정의하여, 어떤 객체의 상태가 변할 때 해당 객체에 의존하는 다른 객체들이 자동으로 업데이트되도록 하는 패턴입니다.
class Subject {
constructor() {
this.observers = [];
}
addObserver(observer) {
this.observers.push(observer);
}
notifyAll() {
this.observers.forEach(observer => observer.update());
}
}
class Observer {
update() {
console.log("Object updated");
}
}
const subject = new Subject();
const observerA = new Observer();
const observerB = new Observer();
subject.addObserver(observerA);
subject.addObserver(observerB);
subject.notifyAll();
이렇게 자바스크립트에서는 싱글톤, 팩토리, 옵저버 등 다양한 디자인 패턴을 활용하여 코드를 더욱 효율적으로 구성할 수 있습니다.
더 많은 디자인 패턴에 대해 알고 싶다면 GoF의 디자인 패턴을 참고하시기 바랍니다.