[javascript] 객체의 프로퍼티를 변경 여부를 채크하는 방법

자바스크립트에서는 객체의 프로퍼티를 변경할 때 그 변경 여부를 체크해야 하는 경우가 있습니다. 이를 위해 몇 가지 방법을 사용할 수 있습니다.

Object.getOwnPropertyDescriptor 메서드

Object.getOwnPropertyDescriptor 메서드를 사용하여 객체의 프로퍼티가 변경 가능한지 여부를 확인할 수 있습니다. 이 메서드는 객체의 속성에 대한 정보를 제공하며, 속성이 writable속성을 가지고 있는지 확인할 수 있습니다.

예시:

const obj = { name: 'John' };
const propertyDescriptor = Object.getOwnPropertyDescriptor(obj, 'name');

console.log(propertyDescriptor.writable); 
// 출력: true

이 코드에서는 Object.getOwnPropertyDescriptor를 사용하여 name 프로퍼티의 writable 속성을 확인하고 있습니다.

hasOwnProperty 메서드

객체의 hasOwnProperty 메서드를 사용하여 특정 프로퍼티가 직접적으로 객체에 속해 있는지 여부를 확인할 수 있습니다.

예시:

const obj = { name: 'John' };

console.log(obj.hasOwnProperty('name')); 
// 출력: true
console.log(obj.hasOwnProperty('age')); 
// 출력: false

이 코드에서는 hasOwnProperty 메서드를 사용하여 obj 객체에 name 프로퍼티가 속해 있는지를 확인하고 있습니다.

프락시(Proxy) 객체

프락시(Proxy) 객체를 사용하여 객체의 프로퍼티 변경 여부를 제어할 수 있습니다. 이를 통해 프로퍼티가 변경되는 것을 감시하고, 필요에 따라 방지할 수 있습니다.

예시:

const obj = { name: 'John' };
const handler = {
  set(target, key, value) {
    console.log(`${key} 속성의 변경을 감지했습니다.`);
    return false;
  }
};
const proxy = new Proxy(obj, handler);

proxy.name = 'Jane';
// 출력: "name 속성의 변경을 감지했습니다."
console.log(proxy.name); 
// 출력: "John"

이 코드에서는 프락시 객체를 사용하여 name 속성의 변경을 감지하고, 변경을 방지하고 있습니다.

각 방법은 객체의 프로퍼티 변경 여부를 확인하고 채크하는 도구로 활용될 수 있습니다. 필요에 따라 적절한 방법을 선택하여 활용할 수 있습니다.

참고 문헌: