getter, setter는 object내의 함수들을 괄호없이 쓸 수 있게 만들어주는 키워드인데,
데이터의 무결성을 보존하기 위해 쓰는 키워드이다.
원본데이터는 항상 무결성을 보존 해야한다는게 국룰인데,
데이터를 수정, 출력 시 직접 원본 데이터를 만지는게 아닌 함수로 간접적으로 다뤄야하는 느낌으로 개발을 하는게 더 요즘느낌임
object 데이터를 만들고, 나이를 1년 후에 출력한다면?
함수를 이용해서 사용하자
var Person = {
name : 'kim',
age : 30,
nextAge() {
return this.age + 1
}
}
이런식으로 함수를 만들어 쓰면,
Person.nextAge()로 썼을 때 31이 출력된다.
이렇게해야만 object안의 데이터를 원본 상태로 둘수있다.
즉, 무결성을 보존할 수 있다!
그러면 장점이 더 많지만 일단은
1. object안의 데이터가 복잡할 수록 저렇게 해야 꺼내기 쉽다.
2. 내부의 변수를 건드리지않아 실수 방지가 된다.
var Person = {
name : 'kim',
age : 30,
setAge(나이){
this.age = 나이
}
}
setAge라는 함수를 object내에 추가했다.
이 함수는 파라미터를 한개 입력하면,
그 파라미터를 그대로 this.age
에 집어넣는 역할을 한다.
이제 Person.setAge(40)
이러면 자유롭게 나이 변경이 됨.
저 object안의 내용이 복잡하면 저렇게 쓰는게 오히려 좋음
함수를 만들면 setAge(40)이런식으로 쓰다보면 좀 복잡해지는데 (암튼 복잡해짐)
그러면 get/set키워드를 함수 옆에 추가하면 된다.
var Person = {
name : 'kim',
age : 30,
set setAge(나이){
this.age = parseInt(나이)
}
}
Person.setAge = 40;
이런식으로 set이라는 키워드를 추가하면
Person.setAge(40)
이거말고
Person.setAge = 40;
이거로 쓸 수 있음
즉, 등호로 데이터를 입력할 수 있다.
직관적으로 보기 쉬워서 이렇게 많이 사용한다.
set붙은 함수를 저런거 setter
라고 부름 ㅇㅇ
var Person = {
name : 'kim',
age : 30,
get nextAge(){
return = this.age + 1
}
}
console.log(Person.nextAge)
get키워드는 이런식으로 사용한다.
그러면 소괄호없이도 nextAge를 사용해 데이터를 꺼낼 수 있다.
그냥 데이터를 뽑거나 가져와줄 때는 get
데이터를 입력하거나 수정할 땐 set
규칙으로는
set함수에는 데이터를 입력해 수정해야해서 파라미터가 존재해야하고
get은 파라미터가 있으면 안되고 return을 가져야함
class안에서 함수를 만들때도 사용가능
class Person {
constructor() {
this.name = 'Park';
this.age = 20;
}
get nextAge() {
return this.age + 1;
}
set setAge(age){
this.age = age;
}
}
var user1 = new Person();
class안의 함수들은 getter/setter로 만들때 이렇게하면 된다.
새로 나오는 object는
user1.nextAge;
user1.setAge = 50;
이렇게 사용할 수 있다.