외부에서도 자유롭게 접근할 수 있다.
접근제어자를 선언하지 않을 시에 public으로 선언된다.
class User {
public userId: string;
constructor (_userId: string) {
this.userId = _userId
}
}
new User('abz').userId;
클래스 외부에서의 접근을 막는다.
class User {
private userId: string;
constructor (_userId: string) {
this.userId = _userId
}
}
new User('abz').userId; // Error
클래스와 그 하위 클래스를 제외한 외부에서의 접근을 막는다.
class User {
protected userId: string; // private를 적용하면 VIP 클래스에서 접근제한
constructor(_userId: string) {
this.userId = _userId;
}
}
class VIP extends User {
constructor(_userId: string) {
super(_userId);
}
public greet() {
console.log(`Welcom ${this.userId}`)
}
}
속성을 읽기 전용으로 설정하여 추가적인 재할당을 금지한다.
class User {
readonly userId: string;
constructor(_userId: string) {
this.userId = _userId;
}
}
const user = new User('abz')
user.userId = 'aby' // Error
각 인스턴스가 아닌 클래스 자체에서 보이는 전역멤버를 생성
범용적인 값에 주로 사용
class User {
public userId: string;
constructor(_userId: string) {
this.userId = _userId;
}
static age = 20;
}
const age = User.age
다른 클래스들이 파생될 수 있는 기초 클래스이다.
직접 인스턴스화 할 수 없다.
추상 메서드는 파생된 클래스에서 구현해야 한다.
abstract class Animal {
protected name: string;
constructor(name: string) {
this.name = name;
}
abstract makeSound(): void;
public move(): void {
console.log("move");
}
}
class Dog extends Animal {
constructor(name: string) {
super(name);
}
makeSound(): void {
console.log(`${this.name} 멍멍!!`);
}
}
const dog = new Dog("진돗개");
dog.makeSound();
const animal = new Animal('개') // Error