class User {
constructor() {}
internalAge: number = 4;
sayHello: string = `나는 ${this.internalAge} 살 입니다.`;
}
const user = new User();
user.internalAge = 10;
console.log(user.sayHello);
user.internalAge = 20;
console.log(user.sayHello);
user.internalAge = 30;
console.log(user.sayHello);
user.internalAge
에 직접 접근해서 나이를 10으로 수정하고, user.internalAge
를 활용해서 현재 나이를 알려주는 sayHello
를 콘솔에 찍으면 처음 값은 10으로 업데이트 되어 표시되지만, 그 이후 20, 30은 업데이트 되지 않은 채 콘솔에 찍힌다.
class
내부의 속성을 활용하여 어떤 연산이 할때 get
을 사용하지 않으면 연산에 사용되는 속성 값의 최신화를 보장할 수 없다. 그래서 이 경우에는 get
을 사용해야 한다.
class User {
constructor() {}
internalAge: number = 4;
get sayHello(): string {
return `나는 ${this.internalAge} 살 입니다.`;
}
}
// get을 적용할 속성 앞에 get을 넣어주고,
// 함수의 형태로 변경하여 return 할 값을 넣어준다.
const user = new User();
// get keyword를 사용했을 때, 마치 sayHello가 함수의 형태
// 같지만 속성값을 사용하듯 user.sayHello 로 사용한다.
user.internalAge = 10;
console.log(user.sayHello);
user.internalAge = 20;
console.log(user.sayHello);
user.internalAge = 30;
console.log(user.sayHello);
get 키워드를 사용하면, user.internal
을 변경할 때마다 정확하게 업데이트 하여 연산한다.
class
내부에서 선언한 맴버변수를 private
접근제어를 설정하면, class 외부에서 바로 접근 할 수 없다. 이 경우 setter 를 통해서 우회적으로 class 내부의 값을 변경해줄 수 있다.
class User {
private internalAge = 4;
/*
맴버변수 internalAge가 private 이기 때문에
class 외부에서는 접근 조차 할 수 없기 때문에
get 을 이용한 age로 접근하도록 한다.
*/
get age():number {
return this.internalAge
}
set editAge(num: number) {
return this.internalAge = num;
}
}
const user = new User();
user.editAge = 20;
console.log(user.age) // 20
class
내부에 internalAge
를 선언했고, private
로 접근제어 했기 때문에 이것을 우회적으로 접근할 수 있는 get age()
, 그리고 이것을 수정할 수 있는 set editAge()
를 사용했다.
getter와 setter를 사용하면 우회적으로 class 내부의 맴버변수에 접근하고 수정할 수 있기 때문에 validation 이나 추가적인 연산이 가능하다.
예를 들어 user.age = 10;
와 같은 방식으로 class 외부에서 age
라는 값을 수정할 수 있다면 조건을 설정하기 까다롭지만, get과 set을 이용하면 editAge(num: number) { if (){} }
등과 같이 조건문 등을 이용하여 validation을 할 수 있을 것 이다.