불변객체란 객체의 프로퍼티를 변경할 수 없는 상태를 말한다.
이러한 점은 상태를 예측가능할 수 있으며, 코드의 안정성을 높이는데 큰 역할을 한다.
객체를 확장하지 못하게 하는 메서드이다.
삭제는 가능하다.
// 객체를 extesnible상태로 변경
Object.preventExtensions([객체])
// extensible의 여부를 boolean값으로 반환
// 확장이 가능하면 true 불가능하면 false를 반환한다.
Object.isExtensible([객체])
출력결과
extensible의 특징은 객체의 확장은 불가능하나 객체의 삭제는 가능하다는 특징을 가지 고 있다.
객체의 확장, 삭제를 불가능하게 하는 메서드이다.
객체 값의 변경은 가능하다.
// seal이 되었는지에 대한 여부
Object.isSealed([객체]);
// 객체를 seal 상태로 변경
Object.seal([객체]);
출력결과
출력결과를 보면 seal은 객체의 추가, 삭제가 불가능 하지만, 객체의 변경은 가능하다는 특징을 가지고 있다. 이러한 이유는 객체 프로퍼티 속성을 보면 알 수 있다.
seal로 변경한 객체의 객체 프로퍼티의 속성을 조회했을 때, 값을 변경하는 writable은 true로 설정되어있고, configurable은 false로 설정되어 있기 때문에 삭제가 불가능하고, 프로퍼티의 속성들도 변경 불가하다.
객체의 확장, 삭제, 변경 모두 불가능하게 하는 메서드이다.
// freeze가 되었는지에 대한 여부
Object.isFrozen([객체]);
// 객체의 상태를 freeze 상태로 변환
Object.freeze([객체]);
출력결과
결과를 보면 알 수 있듯이, 객체의 값변경, 삭제, 추가가 불가능한 상태이다.
freeze 객체의 프로퍼티의 속성을 보면
writable, configurable 모두 false인 상태로 오직 enumerable만 true이기 때문에 읽기밖에 안된다는 특성을 가지고 있다.