반응형
자바스크립트에서 객체는 매우 유연하기 때문에 의도하지 않은 변형이 있을 수 있다. 이때 객체를 보호하여 의도하지 않는 수정을 막는 방법이 존재한다.
- Object.freeze(obj); Object.isFrozen(obj);
- Object.seal(obj); Object.isSealed(obj);
- Object.preventExtensions(obj); Object.isExtensible(obj);
Object.freeze(obj)
이 메서드는 객체를 "동결"시킨다.
즉, 더이상 객체를 변경할 수 없게 되어 '숫자', '문자열'처럼 불변이 된다.
객채가 동결되었는지는 Object.isFrozen() 메서드로 알 수 있다.
구체적으로 다음과 같은 작업이 불가능해 진다.
- 프로퍼티 값 수정 또는 할당
- 프로퍼티 값을 수정하는 메서드 호출
- setter 호출
- 새 프로퍼티 추가
- 새 메서드 추가
- 기존 프로퍼티나 메서드의 설정 변경
Object.seal(obj)
이 메서드는 객체를 "봉인" 시킨다.
즉, 새 프로퍼티를 추가하거나 기존 프로퍼티를 변경 / 삭제 할 수 없다.
그러나 쓰기 가능한 속성의 값은 봉인 후에도 변경할 수 있다. (Object.freeze()와의 차이점)
객체가 봉인되었는지는 Object.isSealed(obj) 메서드로 알 수 있다.
Object.preventExtensions(obj)
이 메서드는 객체의 "확장을 금지" 시킨다.
즉, 새 프로퍼티를 추가하는 것만 금지된다. 프로퍼티에 값을 할당하거나, 삭제하거나, 속성을 변경하는 작업은 가능하다.
확장 금지 여부는 Object.isExtensible(obj) 메서드로 알 수 있다.
위 내용을 정리하면 다음과 같다.
동작 | 일반 객체 | 동결 객체 (freeze) | 봉인 객체 (sealed) | 확장 금지 객체 (prevent extension) |
프로퍼티 추가 | O | X | X | X |
프로퍼티 읽기 | O | O | O | O |
프로퍼티 값 설정 | O | X | O | O |
프로퍼티 속성 변경 | O | X | X | O |
프로퍼티 삭제 | O | X | X | O |
반응형