class Player {
constructor(private firstName: string, private lastName: string, public nickname: string) {}
}
const nico = new Player('nico', 'las', '니꼬');
nico.firstName // error : 'firstName' 속성은 private이며 'Player' 클래스 내에서만 엑세스할 수 있습니다.
// abstract class : 다른 클래스가 상속받을 수 있는 클래스
// 그러나 abstract class는 직접 인스턴스를 만들 수 없다.
abstract class User {
constructor(private firstName: string, private lastName: string, public nickname: string) {}
private getFullName() {
return `${this.firstName} ${this.lastName}`;
}
public getFullName2() {
return `${this.firstName} ${this.lastName}`;
}
}
class Player extends User {}
const nico = new Player('nico', 'las', '니꼬');

: 추상 클래스 내에서 메소드를 정의하되, 메소드의 call signature 만 정의
abstract class User {
constructor(private firstName: string, private lastName: string, public nickname: string) {}
abstract getNickName(): void;
}

User 클래스를 상속받은 Player 클래스에서 getNickName을 구현해야 한다고 알려주고 있다.