1. Getter & Setter
- 비공개로 설정하려는 속성은 private로 설정하고, 속성값을 읽고 수정하는 getter/setter 함수를 사용한다.
- 속성에 직접 접근해 수정하면 데이터 무결성이 깨질 수 있다.(캡슐화 권장)
- 각 객체의 멤버에 접근하는 방법을 세밀하게 제어할 수 있다.
class Person {
private _name: string;
get name() {
return this._name;
}
set name(name: string) {
if (name.length > 10) {
throw new Error("name too long");
}
this._name = name;
}
}
let person = new Person();
console.log(person.name);
person.name = "june";
console.log(person.name);
person.name = "junejunejunejunejune";
2. readonly
- 읽기만 가능한 속성을 선언하기 위해 사용한다.
- 속성을 읽기 전용으로 설정해 변경할 수 없게 만든다.
- 선언될 때나 생성자에서 값을 설정하면 이후 수정할 수 없다.
class Person {
readonly age: number = 20;
constructor(age: number) {
this.age = age;
}
}
let person = new Person(10);
person.age = 30;
3. static
- 전역 멤버를 선언할 때 사용한다.
전역멤버: 객체마다 할당되지 않고 클래스의 모든 객체가 공유하는 멤버
- 범용적으로 사용되는 값에 설정한다.
- "클래스명."을 앞에 붙여 static 멤버에 접근할 수 있다.
- ES6에서는 메소드 전용 속성에는 선언이 안되었으나, TypeScript에서는 사용할 수 있다.
class Grid {
static origin = { x: 0, y: 0 };
calculateDistanceFromOrigin(point: { x: number; y: number }) {
let xDist = point.x - Grid.origin.x;
let yDist = point.y - Grid.origin.y;
return Math.sqrt(xDist * xDist + yDist * yDist) / this.scale;
}
constructor(public scale: number) {}
}
let grid1 = new Grid(1.0);
let grid2 = new Grid(5.0);
console.log(grid1.calculateDistanceFromOrigin({ x: 10, y: 10 }));
console.log(grid2.calculateDistanceFromOrigin({ x: 10, y: 10 }));