ES6와 마찬가지로 타입스크립트에서도 클래스를 지원합니다.
class Person {
name;
constructor(name: string){
this.name = name;
}
}
const user1 = new Person("Tim")
console.log(user1.name); //Tim
클래스는 생성자함수 없이 사용 할수도 있습니다.
class Person {
name:string ="Tim"
age:number; // 오류 발생
}
const user1 = new Person();
user1.age= 5;
클래스 안에는 값을 할당해야합니다.
하지만 클래스 내부에는 이름만 외부에 값을 선언하고 싶을때에는
tsconfig 에서 strict 모드를 끄거나 :앞에 !표를 붙여줍니다. age!:number;
class Person {
name:string ="Tim"
age!:number;
}
const user1 = new Person();
user1.age= 5;
console.log(user1); // { name: 'Tim', age: 5 }
타입스크립트는 접근제한자 기능을 지원합니다.
접근 가능성 | public | protected | private |
---|---|---|---|
클래스 내부 | ◯ | ◯ | ◯ |
자식 클래스 내부 | ◯ | ◯ | ✕ |
클래스 인스턴스 | ◯ | ✕ | ✕ |
모든 클래스안의 속성들은 기본이 public 입니다. 외부에서 접근할수 있고 기본적으로 생략이 가능합니다.
class Person {
public name:string ="Tim" // === name:string ="Tim"
public age!:number; // === age!:number;
}
const user1 = new Person();
user1.age= 5;
private 을 사용하면 클래스 안에서만 접근이 가능합니다.
encapsulation
(캡슐화) 즉 수정되거나 보여서 안되는 값들을 보호하게 됩니다.
보통의 클래스 구조는 이러한 형태를 뜁니다.
class Person {
name: string;
age:number;
constructor(name:string,age:number) {
this.name = name
this.age = age;
}
}
위에서 선언을 하면 생성자 함수에서 초기화 하는 방식으로 말이죠
하지만 접근제한자를 생성자 함수의 매개변수로 사용하면 속성선언과 초기화를 암묵적으로 수행할수 있습니다.
class Person {
constructor(public name:string,public age:number) {
}
}
public 과 private 동일하게 사용할순 있지만 private을 사용하면 외부에선 접근이 불가능합니다.