자바스크립트 Getters & Setters 활용 가이드
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
자바스크립트 개발자, OOP 개념 익히는 초보자, 클래스 보안이 필요한 프로젝트 개발자
핵심 요약
- Getters & Setters는 클래스의 프로퍼티 접근을 제어하는 핵심 메커니즘
- Setters는 데이터 검증 및 정제를 위해 사용되며, 예:
this.#diffOnThrottle = value
- Getters는 포맷팅/연산된 값 반환 가능, 예:
return
${this.#diffOnThrottle}%` - 캡슐화를 통해 내부 상태 보호 및 예측 가능한 객체 설계 가능
섹션별 세부 요약
1. Getters & Setters의 핵심 목적
- 데이터 보호를 위해 클래스의 프로퍼티 접근 제어
this
키워드와 함께 사용하여 유효성 검증 가능- 예:
if (typeof value !== 'number' || value < 0 || value > 100) { throw new Error(...) }
2. F1Car 클래스 예제에서의 Setters 활용
- 프라이빗 필드(
#diffOnThrottle
) 사용으로 외부 직접 접근 방지 set diffOnThrottle(value)
로 값 검증 및 에러 발생 처리- 잘못된 입력 시
Uncaught Error: Differential on throttle must be a number between 0 and 100.
발생
3. Getters를 통한 데이터 포맷팅
get diffOnThrottle()
으로 수치 포맷팅 가능, 예:return
${this.#diffOnThrottle}%`- 사용자에게 투명한 정보 제공 (예: "70%")
- Getter 미설정 시
console.log(this.diffOnThrottle)
→undefined
4. plain object에서의 Object.defineProperty 활용
- 클래스 대신
Object.defineProperty()
로 프로퍼티 정의 가능 - 예:
Object.defineProperty(sauber, 'fuel', {
get() { return `${this._fuel} liters` },
set(value) { ... }
})
sauber.fuel = "full"
→ Error: Fuel must be a number between 0 and 110 liters.
5. Getter를 통한 연산된 데이터 제공
- 연료 소모량 기반 남은 랩 계산 예:
get remainingLaps() {
return Math.floor(this.#fuel / this.#consumptionPerLap)
}
ferrari.remainingLaps
→ 30
(75L / 2.5L per lap)6. 결론: 캡슐화의 중요성 강조
- 내부 상태 보호 → 보안, 예측 가능성, 유지보수성 향상
- F1 엔지니어처럼 필요 없는 설정은 제한해야 함
"banana"
와 같은 잘못된 입력을 자동으로 차단 가능
결론
- Getters & Setters는 데이터 검증, 포맷팅, 캡슐화를 위해 필수적인 패턴
class
또는Object.defineProperty()
로 구현 가능- 프로퍼티 검증(
set
)과 연산된 값 제공(get
)을 결합하여 안전하고 유연한 객체 설계 가능 - 실무에서
#
프라이빗 필드와 함께 사용해 내부 로직 보호 권장