[javascript] 프로퍼티 디스크립터를 통한 객체 타입 체크
자바스크립트에서는 동적 타이핑 언어로서, 변수나 객체의 타입을 미리 정의하지 않고 할당된 값을 통해 타입을 결정합니다. 때로는 변수나 객체의 타입을 확인해야 할 때가 있는데, 이때 프로퍼티 디스크립터를 활용할 수 있습니다.
프로퍼티 디스크립터란?
프로퍼티 디스크립터는 객체의 프로퍼티에 대한 정보를 담고 있는 객체입니다. 이 객체는 Object.getOwnPropertyDescriptor()
메서드를 이용하여 가져올 수 있습니다. 프로퍼티 디스크립터는 value
, writable
, enumerable
, configurable
등의 속성을 가지며, 이를 통해 프로퍼티의 값과 행위를 조작할 수 있습니다.
객체의 타입 체크
객체의 타입을 체크하기 위해서는 해당 객체의 프로퍼티 디스크립터를 가져온 다음, 원하는 타입과 비교하면 됩니다. 일반적으로 typeof
연산자를 사용하여 변수의 타입을 체크할 수 있지만, 객체의 타입을 체크할 때는 이 방법이 적합하지 않습니다. 대신, instanceof
연산자를 사용하여 객체의 생성자 함수와 비교하는 방식을 사용할 수 있습니다.
다음은 프로퍼티 디스크립터를 이용하여 객체의 타입을 체크하는 예제 코드입니다.
// Person 객체 생성자 함수
function Person(name, age) {
this.name = name;
this.age = age;
}
// 객체 생성
var john = new Person('John', 25);
var jane = new Person('Jane', 30);
// 프로퍼티 디스크립터 가져오기
var johnDescriptor = Object.getOwnPropertyDescriptor(john, 'name');
var janeDescriptor = Object.getOwnPropertyDescriptor(jane, 'name');
// 타입 체크
console.log(johnDescriptor.value instanceof String); // false
console.log(janeDescriptor.value instanceof String); // false
console.log(johnDescriptor.value.constructor === String); // true
console.log(janeDescriptor.value.constructor === String); // true
위 예제에서 instanceof
연산자를 사용하여 name
프로퍼티의 값의 생성자 함수와 비교하고 있습니다. 생성자 함수가 String
인 경우는 typeof
연산자를 사용하여 체크할 수 없는 경우입니다.
프로퍼티 디스크립터를 통해 객체의 타입을 체크함으로써 보다 정확하고 신뢰할 수 있는 타입 체크를 수행할 수 있습니다.