# 브릿지 패턴

---

브릿지 패턴의 핵심은 인터페이스의 추상화와 구현을 분리하고, 계층 구조에서 각 클래스를 느슨하게 결합하는 것이다. 이렇게 되면 복잡한 구조에서 서로 독립적으로 요구사항을 변경할 수 있다. 이중 어댑터 패턴이라고도 한다.

다음은 다양한 로그 방식을 계층화한 예시이다.

```
class ConsoleLogger {
  log(message) {
    console.log(message);
  }
}

class AlertLogger {
  log(message) {
    alert(message);
  }
}

class Logger {
  constructor(logger) {
    this.logger = logger;
  }

  log(message) {
    throw new Error('Not implemented!');
  }
}

class InfoLogger extends Logger {
  constructor(message, logger) {
    super(logger);
    this.message = message;
  }

  log() {
    this.logger.log(`INFO: ${this.message}`);
  }
}

class ErrorLogger extends Logger {
  constructor(message, logger) {
    super(logger);
    this.message = message;
  }

  log() {
    this.logger.log(`ERROR: ${this.message}`);
  }
}

const consoleLogger = new ConsoleLogger();
const alertLogger = new AlertLogger();

const infoLogger = new InfoLogger('데이터', consoleLogger);
const errorLogger = new ErrorLogger('무언가 잘못된것 같은데요?!', alertLogger);

infoLogger.log(); // "INFO: 데이터"
errorLogger.log(); // "ERROR: 무언가 잘못된것 같은데요?!"

```

For the site tree, see the [root Markdown](https://slashpage.com/develop.md).
