자바스크립트 Observers를 이용한 비즈니스 로직 재사용성

자바스크립트에서 비즈니스 로직의 재사용성은 소프트웨어 개발자들에게 매우 중요합니다. 비즈니스 로직의 재사용성을 향상시키기 위해 Observer 패턴을 사용할 수 있습니다. Observer 패턴은 객체 간의 일대다 의존성을 정의하고, 객체의 상태 변경에 따라 의존하는 객체들이 자동으로 업데이트되도록 하는 디자인 패턴입니다.

Observer 패턴 소개

Observer 패턴은 관찰자와 주제(subject) 간의 관계를 정의합니다. 주제는 상태를 가지고 있으며, 상태 변경이 발생하면 관찰자들에게 알림을 보냅니다. 관찰자는 주제의 상태 변경에 따라 적절한 동작을 수행합니다. 이를 통해 주제와 관찰자들간의 결합도를 낮추고, 각각을 독립적으로 유지할 수 있습니다.

주제는 일반적으로 “Subject”라는 추상 클래스나 인터페이스로 구현됩니다. 이 클래스는 주제의 상태 변경을 추적하고, 관찰자들을 등록, 삭제, 알림하는 메서드를 제공합니다. 관찰자는 “Observer”라는 인터페이스를 구현하여 주제의 상태 변경에 대한 알림을 받습니다.

비즈니스 로직 재사용성을 위한 Observer 패턴 적용

비즈니스 로직의 재사용성을 향상시키기 위해 Observer 패턴을 적용할 수 있습니다. 예를 들어, 주문 시스템에서 주문 상태의 변경에 따라 다른 서비스들에게 알림을 보내야하는 상황을 가정해보겠습니다.

  1. 주문 시스템에서는 상태 변화를 추적하기 위해 “Order”라는 주제 클래스를 구현합니다. “Order” 클래스는 주문 상태를 가지고 있고, 주문 상태가 변경될 때마다 등록된 관찰자들에게 알림을 보냅니다.

    class Order {
      constructor() {
        this.status = 'Pending';
        this.observers = [];
      }
    
      addObserver(observer) {
        this.observers.push(observer);
      }
    
      removeObserver(observer) {
        this.observers = this.observers.filter(obs => obs !== observer);
      }
    
      notifyObservers() {
        this.observers.forEach(observer => observer.update(this.status));
      }
    
      setStatus(status) {
        this.status = status;
        this.notifyObservers();
      }
    }
    
  2. 관찰자들은 “Observer” 인터페이스를 구현하여 주문 상태 변경에 대한 알림을 받는 기능을 구현합니다.

    class NotificationService {
      update(status) {
        console.log(`Notification: Order status changed to ${status}`);
      }
    }
    
    class InventoryService {
      update(status) {
        console.log(`Inventory: Order status changed to ${status}`);
      }
    }
    
  3. 주문이 생성되면 관찰자를 등록하고 주문 상태가 변경될 때마다 관찰자에게 알림을 보냅니다.

    const order = new Order();
    const notificationService = new NotificationService();
    const inventoryService = new InventoryService();
    
    order.addObserver(notificationService);
    order.addObserver(inventoryService);
    
    order.setStatus('Processing'); // 알림: Order status changed to Processing
                                    // 인벤토리: Order status changed to Processing
    
    order.setStatus('Completed');  // 알림: Order status changed to Completed
                                    // 인벤토리: Order status changed to Completed
    

위의 예제에서는 Observer 패턴을 사용하여 주문 상태 변경에 대한 알림을 NotificationService와 InventoryService에게 자동으로 전달하고 있습니다. 이를 통해 주문 시스템의 비즈니스 로직을 재사용할 수 있으며, 관찰자들의 역할을 쉽게 추가하거나 제거할 수 있습니다.

Observer 패턴은 JavaScript를 포함한 다양한 프로그래밍 언어에서 활용될 수 있으며, 비즈니스 로직의 재사용성을 향상시키는 중요한 도구입니다. 자바스크립트 Observers를 활용하여 애플리케이션의 유지보수성과 확장성을 개선해보세요!