👋 Getter, Setter
1. Getter
-
getter로 선언된 함수를 자동으로 호출- 값을 반환하는 시맨틱을 갖고 있으므로
getter함수에서 값을 반환해야 함
- 값을 반환하는 시맨틱을 갖고 있으므로
-
ES5 형태
var book = {}; Object.defineProperty(book, 'title', { get: function () { return '책'; }, }); console.log(book.title);book.title을 실행하면title프로퍼티에서get속성의 존재를 체크 함- 있으면,
get()함수를 호출하며"책"이 반환되어 출력 됨 book.title.get()처럼 함수로 호출하면 에러가 발생함- ES5의
Descriptor를 참조하세요
-
ES6 형태
const book = { point: 100, get getPint() { return this.point; } }; console.log(book.**getPoint**); // 100get getPoint(){}처럼getPoint()앞에get을 작성하면getter로 선언됨getPoint()함수가 자동으로 호출 됨
-
ES6 장점
- ES5처럼 프로퍼티의 속성 구조가 아님
- 작성 편리
- 다수의
getter사용 가능
const book = { get getPoint() { return "포인트"; } get getTitle() { return "제목"; } } console.log(book.**getPoint**); // 포인트 console.log(book.**getTitle**); // 제목
2. Setter
- 프로퍼티에 값을 할당하면
setter로 선언된 함수 자동 호출- 값을 설정하는 시맨틱을 갖고 있으므로
setter함수에서 값을 설정해야 함
- ES5 형태
var book = { title: 'HTML' }; Object.defineProperty(book, 'change', { set: function (param) { this.title = param; }, }); book.change = 'JS'; console.log(book); // {title: "JS"};book.change = "JS"를 실행하면change프로퍼티에set속성의 존재 여부를 체크- 있으면,
set()함수를 호출 "JS"를 파라미터 값으로 넘겨 줌
- ES6 형태
const bookt = { point: 100, set setPoint(param) { this.point = param; }, }; book.setPoint = 200; console.log(book.point); // 200setPoint() 앞에set을 작성하면setter로 선언됨book.setPoint = 200;setPoint에 값을 할당하면setPoint()가 자동으로 호출 됨- 파라미터 값으로
200을 넘겨줌
- 변숫값을 함수 이름으로 사용
const name = 'setPoint'; const book = { point: 100, set [name](param) { this.point = param; }, }; book[name] = 200; console.log(book.point); // 200name변숫값인 “setPoint”가 함수 이름으로 사용됨getter도 같은 방법으로 사용 할 수 있음
- setter 삭제
const name = 'setPoint'; const book = { set [name](param) { this.point = param; }, }; delete book[name]; console.log(book[name]); // undefineddelete연산자로setter를 삭제 할 수 있음