시작하기 전에..
자판기 커피가 있다고 가정하자,
자판기를 클래스라 하고 커피의 갯수를 variable, 커피를 뽑는것을 method라고 생각하자
그럼 자판기에서 커피를 뽑는데 커피의 갯수가 -1개가 되는게 맞을까? 아니다 무조건 0부터 시작해야 한다.
그렇기 때문에 이를 방지하고자 getter, setter 가 존재하고, -1을 선택해도 0으로 만들어 주기위해 setter가 있는것이다.
그럼 다른 사람이 커피의 갯수를 수정할 수 있으면 좋을까 안좋을까? 아니다 사용자는 접근하면 안된다.
그렇기 때문에 이 커피의 갯수를 private 으로 만드는 것이다.
→ 이 모두가 '캡슐화' 이다.
class User {
constructor(firstName, lastName, age) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
// this.age 는 계속 get age()를 호출하고, age는 계속 set age()를 호출한다.
// -> stack trace 발생
// 그렇기 때문에 get, set 에서 this.age 를 this._age라는 다른 변수로 지정해 준다.
}
get age() {
return this._age;
}
set age(value) {
// if (value < 0) {
// throw Error('age can not be negative');
// }
// 방법1
this._age = value < 0 ? 0 : value; // 방법2
// 설명과정2 : 그렇기 때문에 setter 에서 잘못된 변수값 접근을 막아준다.
}
}
const user1 = new User('Steve', 'Job', -1); // 설명과정1 : 사용자의 나이가 -1 은 잘못된 값이다.
console.log(user1.age); // 0