1장 - 객체지향 디자인


2장 - 단일 책임 원칙을 따르는 클래스 디자인하기


// 단순한 Gear 클래스가
class Gear {
  constructor(chainring, cog) {
    this.chainring = chainring;
    this.cog = cog;
  }

  get ratio() {
    return this.chainring / this.cog;
  }
}

// 기능이 추가되면서 복잡해지기 시작한다. Gear 는 정말로 타이어에 대해 알아야할까?
class Gear {
  constructor(chainring, cog, rim, tire) {
    this.chainring = chainring;
    this.cog = cog;
    this.rim = rim;
    this.tire = tire;
  }

  get ratio() {
    return this.chainring / this.cog;
  }

  get gearInches() {
    const { ratio, rim, tire } = this;
    return ratio * (rim + tire * 2);
  }
}