[Javascript] 상수: const와 불변성

[원본 링크]

자바스크립트는 es5부터 const 키워드를 통한 상수 정의 기능을 제공한다.

const로 정의된 변수는 값 변경이 불가능하다.
변경 시도를 하더라도 에러만 던지고 프로그램이 터질 것이다. 이렇게. image

image

근데 여기에는 맹점이 있다.
const는 값의 '재할당'만을 방지하지, 값 내부의 값에 대해서는 신경을 쓰지 않는다는 것이다.

배열로 바꿔서 테스트해보자.
재할당은 당연히 안된다. image

image 하지만, 메서드를 통한 내부 값의 변경은 가능하다!
가령 배열의 push 메서드는 값의 상태를 변경시킨다. image

image 잘 실행되는 걸 볼 수 있다.

이건 문법 설계 자체가 이래서 어쩔 수는 없는 문제다.
만약 완벽하게 상태까지 변경되지 않을 객체를 원한다면. Object.freeze 메서드를 통해 객체를 생성하면 된다.
이 메서드를 사용하면 기존의 객체와 완전히 동일하면서 변경만 금지된 객체를 만들어서 뱉어준다.

그럼 '쓰기 가능한' 기능의 호출은 전부 차단된다. image

image 읽기만 행하는 기능은 그대로 다 사용할 수 있으니 걱정 안해도 된다. image

image



참조
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze