getter와 setter를 메서드로 만들어 두면 그 메서드를 사용할 때 좀 불편하다. 속성값에 접근하려는데 함수처럼 생긴 메서드를 입력해야 하니 헷갈릴 수도 있다. 그런 분들을 위한 게 get 키워드, set 키워드 문법이다. 코드를 보자
class Square {
#length
constructor (length) {
this.length = length
}
get length () {
return this.#length
}
get perimeter () {
return this.#length * 4
}
get area () {
return this.#length * this.#length
}
set length (length) {
if (length <= 0) {
throw '길이는 0보다 커야 합니다.'
}
this.#length = length
}
}
// 클래스 사용하기
const squareA = new Square(10)
console.log(`한 변의 길이: ${squareA.length}`)
console.log(`둘레: ${squareA.perimeter}`)
console.log(`넓이: ${squareA.area}`)
squareA.length = 15;
console.log(`한 변의 길이: ${squareA.area}`)
// 예외 발생시키기
const squareB = new Square(-10)
- 한 변의 길이에 접근하는 데에 squareA.length 라고 쓰면 된다. 메서드로 getter를 정의했을 때보다 간결하다.
- squareA.length = 15; 로 length 값을 바꿀 수도 있다. length라는 setter를 사용한 것이다.
- 그리고 여전히 클래스 생성시 파라미터로 -10을 넣으면 throw 에러메시지가 console창에 빨갛게 뜬다. 생성시 입력한 파라미터가 setter로 간 것이다.
'자바스크립트 리뷰' 카테고리의 다른 글
객체에 함수를 속성으로 넣은 것을 메소드라고 부른다.[혼공자 6-1-1] (0) | 2023.04.07 |
---|---|
console.log 메소드가 forEach 파라미터로 들어갈 때. [혼공자 5-2-4] (0) | 2023.04.06 |
클래스 정의시 넣은 #length 같은 실수방지 코드의 단점과 그 해결책 (0) | 2023.04.06 |
class 정의시 사용자 실수방지 코드를 넣었음에도 사용자가 메서드까지 써서 굳이 실수할 때는? [혼공자 9-2-7] (0) | 2023.04.06 |
class를 정의할때 사용자의 실수를 막는 장치를 넣어둘 수 있다. [혼공자 9-2-5] (0) | 2023.04.06 |