객체의 프로퍼티는 2가지로 나뉘어 진다.
let obj = {
get propName() {
// getter, obj.propName을 실행할 때 실행되는 코드
},
set propName(value) {
// setter, obj.propName = value를 실행할 때 실행되는 코드
}
};
obj.functionname // 함수의 정보에 대해서 알려준다.
obj.functionname // getter로 설정된 함수의 리턴값이 도출된다.
getter 만 있고 setter가 없을 경우 obj.functionname = 값 으로 설정할때 에러가 발생한다.
값을 받아서 기존 값들을 갱신해줄때 사용하거나 객체의 속성 값을 설정하기 전에 그 값을 검증하거나, 객체의 상태를 체크하는 등의 로직을 수행할 수 있다.
let person = {
name: "John",
age: 30,
get fullName() {
return this.name + " " + this.age;
},
set fullName(value) {
let parts = value.split(" ");
this.name = parts[0];
this.age = parts[1];
}
};
console.log(person.fullName); // "John 30"
person.fullName = "Jane 25";
console.log(person.fullName); // "Jane 25"
위 코드에서 fullName은 객체 person의 속성이고, 이 속성에 getter와 setter를 정의했습니다.
getter에서는 name과 age 속성 값을 조합해서 fullName을 반환하고, setter에서는 fullName을 name과 age로 나누어 person 객체의 name과 age 속성 값을 변경한다.
공부하면서 한가지 의문점이 생겼다. 그냥 getter, setter 를 몰랐을때 함수로 구현해서 조건문을 두어서 관리하면 되지 않을까?
굳이 getter와 setter를 사용할 필요가 있을까?
let person = {
name: "John",
age: 30,
get fullName() {
return this.name + " " + this.age;
},
set fullName(value) {
let parts = value.split(" ");
this.name = parts[0];
this.age = parts[1];
}
};
console.log(person.fullName); // "John 30"
person.fullName = "Jane 25";
console.log(person.fullName); // "Jane 25"
let person = {
name: "John",
age: 30,
getFullName: function() {
return this.name + " " + this.age;
},
setFullName: function(value) {
let parts = value.split(" ");
this.name = parts[0];
this.age = parts[1];
}
};
console.log(person.getFullName()); // "John 30"
person.setFullName("Jane 25");
console.log(person.getFullName()); // "Jane 25"
둘을 비교해보니 코드를 읽기에는 별로 불편함을 느끼지 못하였다. 구분하기에도 그닥.. 차이점을 느낄수 없었다.
하지만 getter와 setter의 차이점은 아래와 같다고 한다.
이번에 들어서 getter와 setter에 대해 다시 공부할수 있었고 차이점에 대해서 궁금증을 가지고 있었는데 알수 있었다.
일단 getter 와 setter는 객체 속성에 대한 문법적인 지원을 받는다고 한다. 또한 외부에서 수정이 불가능하다고 하니 확실히 더 중요한 내용인것 같다 .
https://inpa.tistory.com/entry/JS-%F0%9F%93%9A-getter-setter-%EB%9E%80
chatGPT