[JS] Object.freeze()

0
post-thumbnail

변하지 않는 객체 만들기

Promise를 공부하다 만난 아래 예제에서 Object.freeze() 라는 걸 처음 보게 되었다. freeze? 객체를 얼린다? 코드 만 봤을 때 Promise의 state를 저장해놓고 가져다 쓰려고 만든 객체 인 것 같은데 Promise state 종류는 변하지 않으니까 이 속성을 불변하게 유지하려는 걸까?라는 생각으로 Object.freeze() 에 대해 찾아보았다.

const PromiseStateEnum = Object.freeze({
  PENDING: 'pending',
  FULFILLED: 'fulfilled',
  REJECTED: 'rejected',
}); //참고 :enum은 열거형(enumerated type)이라고 부른다. 열거형은 서로 연관된 상수들의 집합이라고 할 수 있다.

/**
 * @constructor
 * */
export function Promise() {
  this._fulfillmentTasks = [];
  this._rejectionTasks = [];
  this._promiseResult = undefined;
  this._promiseState = PromiseStateEnum.PENDING;
}

MDN에 나와있는 Object.freeze()에 대한 설명은 다음과 같다.

*Object.freeze()
Object.freeze() 메서드는 객체를 동결합니다.
동결된 객체는 더 이상 변경될 수 없습니다. 즉, 동결된 객체는 새로운 속성을 추가하거나 존재하는 속성을 제거하는 것을 방지하며 존재하는 속성의 불변성, 설정 가능성(configurability), 작성 가능성이 변경되는 것을 방지하고, 존재하는 속성의 값이 변경되는 것도 방지합니다. 또한, 동결 객체는 그 프로토타입이 변경되는것도 방지합니다. freeze()는 전달된 동일한 객체를 반환합니다.

freeze 메서드로 얼려진 객체는 속성 추가/제거/수정이 불가하고 객체의 프로토타입 역시 변경할 수 없다고 한다!🥶🥶🥶🥶🥶🥶🥶

<freeze 활용 예제>

const obj = {
  prop: 42
};

Object.freeze(obj);

obj.prop = 33;
// Throws an error in strict mode

console.log(obj.prop);
// expected output: 42

오호.. 선언한 객체을 Object.freeze(obj)로 얼려버리면 속성 수정이 불가한 객체로 변하는 듯 하다. 특정 불변값을 객체에 저장해놓고 가져다 쓰는 용도로 쓰면 유용할 듯하다!🥶

0개의 댓글