[JS] 참조타입의 변형을 막는 방법 (freeze, seal)

참조타입(객체)은 속성을 추가/제거하거나 값을 변경하는 등 여러 변경이 일어날 수 있다.

만약 어떤 객체가 더이상 변경되지 않도록 막고싶다면 경우에따라 freeze(), seal()을 사용할 수 있다.

 

freeze() - 모든 변경을 막는 경우

새로운 속성 추가/제거, 속성의 값 변경을 포함한 모든 변경을 막는다. 설정 가능 여부, 쓰기 가능 여부가 모두 거짓이 된다!

또한 변경을 막은 객체를 반환한다.

 

const obj = {
    prop: 42,
};

const returnObj = Object.freeze(obj);
obj.prop = 33;  // 처리X, 에러발생X

console.log(obj.prop);  // 42
console.log(obj === returnObj);  // true

 

 

seal() - 속성 변경을 막는 경우

속성 추가/삭제가 불가능하고 속성의 값은 변경 가능하다. 마찬가지로 seal된 객체를 반환한다.

 

const obj = {
    prop: 42,
};

const returnObj = Object.seal(obj);
obj.prop = 33;
obj.newProp = 10;
delete obj.prop;

console.log(obj);  // { prop: 33 }
console.log(obj === returnObj);  // true