getter, setter 대체 왜 쓰는지 알아보기
object를 생성해보자.
var 사람 = {
name: 'Park',
age: 30
}
object에서 age 자료를 꺼내고 싶으면?
사람.age;
근데 요새는 자료를 바로 꺼내지 않고, **자료를 꺼내는 법을 함수로 만들어서 꺼낸다**(유행하는 잡기술임).
내년 age를 알고 싶은 함수를 추가해보자.
var 사람 = {
name: 'Park',
age: 30,
nextAge(){ // 지금 age에서 1을 더해서 출력하는 함수
return this.age + 1; // this == 사람 object
}
}
사람.age + 1; // 31
사람.nextAge(); // 31
age + 1하면 더 쉬운데 왜 nextAge를 만들까?
함수를 만들어 object 데이터를 다루는 이유
1. object 자료가 복잡할 때 이득
age가 엄청 긴 array라거나, 큰 object가 들어가 있을 수도 있다. 그렇다면 사람.age[1].age2.age3[4] ... 등 깊게 들어가야 한다. 내가 원하는 데이터를 꺼내쓰는 법을 미리 정의를 해두면 굳이 코드가 복잡해지지 않을 거다.
2. object 자료 수정시, 안전장치 기능개발 가능
나이를 바꾸고 싶다면
사람.age = 1; // 초보가 object 데이터를 수정하는 법
근데 숫자를 넣어야하는데 실수로 문자 데이터를 넣었다 하자.
사람.age = '20';
이렇게 데이터를 수정하면 실수 유발할 수 있다. 그래서 나이를 변경하는 함수를 만들어보자.
var 사람 = {
name: 'Park',
age: 30,
nextAge(){
return this.age + 1;
},
setAge(나이){ // 데이터 수정해주는 함수를 제작
this.age = 나이;
}
}
사람.setAge(20);
근데 age = 20하면 쉬운데 왜 굳이 setAge()를 만들었을까?
데이터 수정시 미리 검사 가능
사람.setAge('20');
실수로 문자를 쳤다고 하자. 그러면 데이터를 수정하기 전에 미리 검사할 수 있다.
var 사람 = {
name: 'Park',
age: 30,
nextAge(){
return this.age + 1;
},
setAge(나이){
this.age = parseInt(나이); // ⬅️
}
}
사람.setAge(20);
즉, 데이터를 꺼내거나/수정하거나 그럴 때 편리하고 실수를 방지할 수 있다. 그래서 데이터 관리하기 편하다.
ES5: 만약 복잡한 소괄호 꼴보기 싫다면 => set/get 키워드
getter, setter
문법을 더 직관성 가지고 쓸 수 있도록 도와주는 키워드다. 소괄호를 떼준다고 생각하면 됨.
- **get** : 데이터를 꺼내쓰는 함수에 ➡️ setter
- **set** : 데이터 변경하는 함수에 ➡️ setter
var 사람 = {
name: 'Park',
age: 30,
get nextAge(){ // ⬅️ getter
return this.age + 1;
},
set setAge(나이){ // ⬅️ setter
this.age = parseInt(나이);
}
}
사람.setAge = '20'; // ⬅️
사람.nextAge; // ⬅️ 소괄호 안써도 나이 출력됨
특징
**get 함수들(getter)**
- return이 꼭 있어야한다.
- 파라미터가 없어야 한다.
**set 함수들(setter) **
- 파라미터가 1개 있어야한다.
class에서 사용하는 get/set
- prototype 함수들에도 get/set 가능
class 사람{
constructor(){
this.name = 'Park';
this.age = 20;
}
get nextAge(){
return this.age + 1;
}
set setAge(나이){
this.age = 나이;
}
}
var 사람1 = new 사람();
사람1.nextAge; // 21
사람1.setAge = 23; // 사람1 = {name: 'Park', age: 23}
데이터 출력/수정 함수를 만들어 쓰는 이유?
데이터 무결성. 데이터를 수정하기 전에 검사하고 싶을 때 사용하는 문법들이다.
get를 사용해서 미리 정의해놓으면 관리를 편하게 데이터를 다룰 수 있다.
나중에 리액트, 뷰, 앵귤러도 이런식으로 모든 데이터를 다룬다.
'Front-End: Web > JavaScript' 카테고리의 다른 글
[코딩애플] js part 3-1. 틀린그림 찾기능력이 향상되는 Destructuring 문법 (0) | 2022.10.21 |
---|---|
[코딩애플] js part 2-8. class, extends, getter, setter 연습문제 (0) | 2022.10.21 |
[코딩애플] js part 2-6. class를 복사하는 extends / super (0) | 2022.10.21 |
[코딩애플] js part 2-5. ES6 방식으로 안쉽게 구현하는 상속기능(Class) (0) | 2022.10.21 |
[코딩애플] js part 2-4. 상속기능을 구현하는 다른 방법 (0) | 2022.10.21 |