get
: 본 필드의 값을 숨긴 채 내부에서 가공된 값을 꺼낼 수 있다.
set
: 필드를 private로 만들어 외부의 접근을 제한한 후,
setter를 사용해 전달받은 값을 내부에서 가공해 필드에 넣어줄 수 있다.
class 원하는클래스명 {
constructor(파라미터1, 파라미터2){
this.속성명1 = 파라미터1;
this.속성명2 = 파라미터2;
}
// 사용자가 속성의 값을 꺼낼때 실행
get 속성명1 {
return this.속성명1 * 2;
}
// 사용자가 속성에 값을 저장할때 실행
set 속성명1 (value){
if(value > 0)
this._속성명1 = value;
}
}
get과 set에서 this.age가 아닌 this._age로 한 이유?
_
는 private하다 또는 내부적인 속성이다라는 뜻으로 쓰인다.
이렇게 만든 프로퍼티는 외부에서 접근이 가능하지만,
외부에서는 사용하지 않는다.
❓ 만약 get과 set에서 this._age가 아닌 this.age를 쓴다면?
👉 getter와 setter가 무한반복하게 된다.
아래는 get과 set 코드 예시이다.
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
get age() {
return this._age; // _는 private하다 또는 내부적인 속성이다라는 뜻이다.
}
set age(value) {
if (value < 0) {
console.error("나이가 음수입니다.");
// 예외 처리는 따로 하지 않았기에,
// 음수값이어도 콘솔창에서만 에러표시가 뜨고 메소드가 실행된다.
}
this._age = value;
}
introduce() {
return "제 이름은 " + this.name + "이고, 나이는 " + this.age + " 입니다.";
}
}
const tata = new Person("tata", 29);
console.log(tata.introduce()); // 제 이름은 tata이고, 나이는 29 입니다.
이렇게 get과 set을 이용하면 객체의 무결성을 보장할 수 있다.
❗️참고) 무결성이란 데이터의 정확성과 일관성을 유지하고 보증하는 것을 말한다.