자바스크립트 클래스에서 객체의 속성을 유효성 검사하는 방법은 무엇인가요?
- 생성자 함수와 조건문을 사용한 유효성 검사:
class Person { constructor(name, age) { if (typeof name === 'string') { this.name = name; } else { throw new Error('name 속성은 문자열이어야 합니다.'); } if (typeof age === 'number' && age > 0) { this.age = age; } else { throw new Error('age 속성은 양수 숫자여야 합니다.'); } } }
- Object.defineProperty()를 사용한 유효성 검사:
class Person { constructor(name, age) { Object.defineProperty(this, 'name', { get() { return name; }, set(value) { if (typeof value === 'string') { name = value; } else { throw new Error('name 속성은 문자열이어야 합니다.'); } } }); Object.defineProperty(this, 'age', { get() { return age; }, set(value) { if (typeof value === 'number' && value > 0) { age = value; } else { throw new Error('age 속성은 양수 숫자여야 합니다.'); } } }); this.name = name; this.age = age; } }
- Proxy를 사용한 유효성 검사:
class Person { constructor(name, age) { this.name = new Proxy(name, { set(target, prop, value) { if (typeof value === 'string') { target[prop] = value; return true; } else { throw new Error('name 속성은 문자열이어야 합니다.'); } } }); this.age = new Proxy(age, { set(target, prop, value) { if (typeof value === 'number' && value > 0) { target[prop] = value; return true; } else { throw new Error('age 속성은 양수 숫자여야 합니다.'); } } }); } }
이러한 방법들은 객체의 속성을 유효성 검사하고 원하는 조건에 맞지 않으면 에러를 발생시킵니다. 다만, 사용자가 클래스를 인스턴스화하는 시점에서 유효성 검사가 수행되므로, 객체 속성의 값이 나중에 변경될 경우를 대비하여 값 변경 시에도 유효성 검사 로직을 추가하는 것이 좋습니다.
[#javascript], [#programming]