[Javascript] 상수: const와 불변성
자바스크립트는 es5부터 const 키워드를 통한 상수 정의 기능을 제공한다.
const로 정의된 변수는 값 변경이 불가능하다.
변경 시도를 하더라도 에러만 던지고 프로그램이 터질 것이다. 이렇게.


근데 여기에는 맹점이 있다.
const는 값의 '재할당'만을 방지하지, 값 내부의 값에 대해서는 신경을 쓰지 않는다는 것이다.
배열로 바꿔서 테스트해보자.
재할당은 당연히 안된다.

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

잘 실행되는 걸 볼 수 있다.
이건 문법 설계 자체가 이래서 어쩔 수는 없는 문제다.
만약 완벽하게 상태까지 변경되지 않을 객체를 원한다면. Object.freeze 메서드를 통해 객체를 생성하면 된다.
이 메서드를 사용하면 기존의 객체와 완전히 동일하면서 변경만 금지된 객체를 만들어서 뱉어준다.
그럼 '쓰기 가능한' 기능의 호출은 전부 차단된다.

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


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