[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 연산자를 사용하여 체크할 수 없는 경우입니다.

프로퍼티 디스크립터를 통해 객체의 타입을 체크함으로써 보다 정확하고 신뢰할 수 있는 타입 체크를 수행할 수 있습니다.