Ref: https://www.typescripttutorial.net/typescript-tutorial/typescript-getters-setters/
아래의 Person 클래스는 age, firstName, lastName 세 프로퍼티를 갖는다.
class Person {
public age: number;
public firstName: string;
public lastName: string;
}
Person 클래스의 어느 속성에 접근하기 위해서는 다음과 같이 해야 한다.
let person = new Person();
person.age = 26;
우리가 age 프로퍼티에 유저가 입력한 값을 할당한다고 가정해보자.
person.age = inputAge;
inputAge는 어느 숫자든 될 수 있다. 나이의 값으로 타당한지 보장하기 위해서는 할당하기 전에 아래와 같이 체크할 수 있다.
if( inputAge > 0 && inputAge < 200 ) {
person.age = inputAge;
}
이 체크를 할당하기 전 모든 곳에서 사용하는 것은 장황하다.
체크를 반복하는 것을 피하기 위해서, 우리는 getters와 setters를 사용할 수 있다. getters와 setters는 우리가 클래스의 프로퍼티로의 접근을 통제할 수 있게 만들어준다.
class Person {
private _age: number;
private _firstName: string;
private _lastName: string;
public get age() {
return this._age;
}
public set age(theAge: number) {
if (theAge <= 0 || theAge >= 200) {
throw new Error('The age is invalid');
}
this._age = theAge;
}
public getFullName(): string {
return `${this._firstName} ${this._lastName}`;
}
}
이제 우리는 age setter 메소드에 다음과 같이 접근할 수 있다.
let person = new Person();
person.age = 10;
주목할 것은 setter를 작성할 때 일반적인 메소드와 같이 괄호를 사용하지는 않는다. 우리가 person.age를 부르면, age setter 메소드가 호출된다.
person.age = 0;
만약 우리가 age의 값으로 타당하지 않은 값을 할당하면, setter는 아래와 같이 error를 던진다.
Error: The age is invalid
그리고, 우리가 person.age에 접근할 때, age getter가 호출된다.
console.log(person.age);