const 는 과연 불변한가?

자바스크립트를 공부하다가 불변이라는 개념이 나와서 자바의 불변객체가 떠올라 친숙해서 정리해보기로 했다.

const 가 불변한지에 대해 알아보기 앞서 자바스크립트의 변수 선언 방식에 대해 가볍게 알아보자.

 

var, let, const

자바스크립트에서 변수 선언에는 var, let, const 가 있다.

특징은 간단하게 보자면 아래와 같다.

var 는 딱 봐도 변화무쌍해보이고 사용 시 유지보수의 험난함이 예상되는데 역시나 안티패턴이라고 하니 쓰지 않도록 하자.

1. var

  • 변수 재선언 가능
  • 값 재할당 가능
var a = 1;

var a = 2;  // 가능
a = 3;      // 가능

console.log(a);
-> 3 출력

2. let

  • 변수 재선언 불가능
  • 값 재할당 가능
let a = 1;

let a = 2;  // 불가능
a = 3;      // 가능

console.log(a);
-> 3 출력

3. const

  • 변수 재선언 불가능
  • 값 재할당 불가능
const a = 1;

const a = 2;  // 불가능
a = 3;        // 불가능

console.log(a);
-> 1 출력

 


그렇다면 const 는 불변(immutable) 한가?

답은 아니오다. 물론 문법 자체가 그렇듯 const 에 값 재할당은 불가능하다. 

하지만 주목할건 const 의 주소값(= 참조값) 재할당이 불가능한것이지 const 가 Object 라면 아래와 같이

Object 내의 값이나 상태는 얼마든지 변할 수 있다.

const obj = {};

obj['property'] = 1;

console.log(obj);
-> {property: 1} 출력

 

위에서 보았듯 obj 의 내부값이나 상태는 변경 가능하므로 불변하다고 할 수 없다.

+ Recent posts