들어가며 (기본 특징)

5.1 클래스와 상속

접근 한정자

— 접근 한정자를 사용하여 내부 구현 정보를 많이 공개하지 않는다.

→ 잘 정의 된 API만 노출하도록 클래스를 설계 할 수 있다.

Abstract

abstract class Piece {
  protected position: Position;
  constructor(private color: ColorType, file: FileType, rank: RankType) {
    this.position = new Position(file, rank);
  }
  /**
   * 기본 구현을 포함한다
   * -> 서브클래스에서 오버라이드 할 수 있다.
   * -> 접근 한정자가 없어서 public이다.
   */
  moveTo(position: Position) {
    this.position = position;
  }
    
    /**
     * 주어진 시그니처와 호환되게 구현해야한다.
     * -> 하위클래스에 이 사실을 알린다.
     * -> 구현하지 않으면 컴파일 타임에 타입에러가 발생한다.
     * => 즉, 추상클래스 구현시에는 추상 메서드도 반드시 구현해야한다.
     */
  abstract canMoveTo(position: Position): boolean;
}