플러그인 시스템(Plugin System)

예시

Webpack의 Tapable

interface Plugin {
  execute(): void;
}

class Application {
  private plugins: Plugin[] = [];

  addPlugin(plugin: Plugin): void {
    this.plugins.push(plugin);
  }

  runPlugins(): void {
    this.plugins.forEach(plugin => plugin.execute());
  }
}

class LoggerPlugin implements Plugin {
  execute(): void {
    console.log("Logging...");
  }
}

class EmailPlugin implements Plugin {
  execute(): void {
    console.log("Sending email...");
  }
}

// 사용 예
const app = new Application();
app.addPlugin(new LoggerPlugin());
app.addPlugin(new EmailPlugin());
app.runPlugins();