타입스크립트 클래스의 기능 대부분은 C# 에서 빌려왔다
가시성 한정자, 프로퍼티 초기자, 다형성, 데코레이터, 인터페이스 등 지원
프로퍼티 초기자와 데코레이터 기능은 자바스크립트에서도 지원하므로 실제 런타임 코드를 생성한다
나머지는 타입스크립트 고유 기능으로 컴파일 타임에만 존재한다
컴파일 이후 자바스크립트 코드에서는 어떤 코드도 생성되지 않는다
체스를 클래스로 구현해본다
class Game {}
class Piece {}
class position {}
class King extends Piece {}
class Queen extends Piece {}
class Bishop extends Piece {}
class Knight extends Piece {}
class Rook extends Piece {}
class Pawn extends Piece {}
type Color = 'Black' | 'White'
type File = 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H'
type Rank = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8
class Position {
constructor(private file: File, private rank: Rank){}
}
class Piece {
protected position: Position
constructor(private readonly color: Color,
file: File,
rank: Rank
){ this.position = new Position(file, rank)}
}
class 에서 선언한 프로퍼티에 선언과 함께 값을 할당하지 않았을 경우
생성자 함수에서 할당해주지 않으면 undefined 가 된다
따라서 생성자 함수에서 값을 할당받지 않을 것이라면
T | undefined
로 작성해야 한다
readonly 는 초기에 값을 할당 후 변경 불가
protected 는 자식만 접근 가능한 프로퍼티
private 는 외부에서 접근할 수 없음
strictNullChecks 와 strictPropertyInitialization
을 켜면 클래스 인스턴스 변수를 할당했는지 확인할 수 있지만
strict 를 켜면 다 포함되어 있음
타입스크립트는 세 가지 접근 지정자를 갖는다
public (default) , protected, private