클래스의 속성중 하나인 private속성은 class안에서만 사용하는 값이므로 외부에서 수정할 수 없고
확인도 할 수 없다.
때문에 상황에 따라서 속성을 읽고 쓸 수 있는 메소드를 만드는데 이것이 게터와 세터라고 할 수 있다.
여기서 게터는 getter라는 이름처럼 속성값을 확인할 때 사용하고
세터는 setter라는 이름처럼 속성값을 지정해줄 때 사용한다.
아래 코드를 보자
// 정사각형 클래스
class Square {
#length //#length는 private
constructor (length) { //클래스의 파라미터로 length 추가
this.length = length
}
//아래 코드는 위의 길이값을 바탕으로 둘레, 한 변의 길이, 넓이를 계산하는 코드
get length () {return this.#length}
get perimeter () {return this.#length * 4}
get area () {return this.#length * this.#length}
//아래 코드는 set을 사용
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}`)
// 예외 발생시키기
const squareB = new Square(-10)
// 실행결과
// 한 변의 길이: 10
// 둘레: 40
// 넓이: 100
// 에러 하나
자, 여기서 length는 private다.
아래 get을 사용한 코드 3줄이 있는데, 이것은 private 값인 length를 이리저리 조작해서 얻은 값을 불러오게 하는 코드다
실제로 아래 '클래스 사용하기' 줄을 보면 결과적으로, private값을 가져온 것을 알 수 있다.
아래 set을 사용한 코드를 보면 조건문의 경우는 그냥 에러걸러내는 용이니 넘어가고 그 다음줄을 보면
this.#length = length가 있다.
즉 private 값인 #length에 외부에서 가져온 파라미터 값인 length를 넣는다는 뜻이다.
결과적으로 외부에서 내부 private에 간섭을 한것이라고 볼 수 있는데
어쨌든 값 변화는 클래스 내부에서 일어난 것이기 때문에 문제는 없다.
정리
밖과 절대로 소통하지 않는 방구석 폐인에게 외부인이 편지를 써봤자 그 폐인은 우체통을 결코 확인하지 않을 것이다.
때문에 그와 함께 사는 가족들에게 직접 편지를 건네고
그 가족을 통해 폐인에게 편지가 도착하는 것이다.
여기서 방구석 폐인은 private라고 할 수 있고
그와 소통해주는 가족이 게터와 세터라고 할 수 있고
외부인은 그 private에 접근하려고 하는 외부인자들이라고 할 수 있다.
다만 주의해야할 것이
코딩의 편의성을 위해 모든 private에 게터와 세터를 사용하려는 경우가 있을 수 있다는 것이다.
하지만 그렇게 했다간 대체 왜 private 속성을 사용하겠는가
만약 값을 함부로 보여줘선 안 된다고 한다면 게터와 세터의 사용을 지양해야 할 것이다.
마지막으로 게터와 세터 코드의 간결한 코드를 작성하고 끝내겠다.
class 클래스 이름{
get 이름() {return 값}
set 이름(value) {}
}
'Language > JavaScript' 카테고리의 다른 글
JavaScript 공부정리 - 클래스 (0) | 2022.10.19 |
---|---|
JavaScript 공부정리 - 프리티어 (0) | 2022.10.14 |
JavaScript 공부정리 - 예외처리 (1) | 2022.10.13 |
JavaScript 공부정리 - 호이스팅 (0) | 2022.10.07 |
JavaScript 공부정리 - 클래스 (0) | 2022.10.07 |