왜 const는 JavaScript 배열을 고정하지 않을까

발행: (2025년 12월 11일 오후 12:12 GMT+9)
6 min read
원문: Dev.to

Source: Dev.to

Why const Doesn’t Freeze Your JavaScript Arrays에 대한 표지 이미지

Intro - The Common Confusion

const를 배열에 사용하면 전체가 고정된 것처럼 느껴집니다. 그런데 push(), pop()을 하거나 값을 업데이트하면 여전히 변합니다. 상수라면 왜 계속 변하는 걸까요?

답은 JavaScript가 변수와 레퍼런스를 처리하는 방식에 있습니다. 그 차이를 이해하면 이 동작은 훨씬 덜 신비롭고 논리적으로 보입니다.

Binding vs Value — What const Actually Does

const 변수는 땅에 단단히 박힌 표지판과 같습니다. 표지판 자체를 다른 곳으로 옮길 수는 없지만, 표지판이 가리키는 대상은 자유롭게 움직일 수 있습니다.

  • 원시값(Primitives) 은 한 번 놓이면 형태가 변하지 않는 단단한 돌과 같습니다.
  • 배열과 객체 는 작업대와 비슷합니다: 표지판은 고정돼 있지만, 작업대 위의 도구와 부품은 재배열, 추가, 제거가 가능합니다.

핵심은 여기 있습니다. const는 포인터를 보호할 뿐, 그 포인터가 가리키는 대상 은 보호하지 않습니다.

Mutable vs Immutable Data Types

  • 원시값 은 봉인된 봉투와 같습니다—내용을 읽을 수는 있지만 내용을 바꿀 수는 없습니다. 다른 것이 필요하면 새로운 봉투를 만들어야 합니다.
  • 객체와 배열 은 열린 노트북과 같습니다. 같은 페이지에 글을 쓰고, 지우고, 메모를 추가하거나 순서를 바꿀 수 있습니다.

이 차이가 const 변수는 여전히 제자리에서 변하는 데이터를 가리킬 수 있는 이유를 설명합니다.

Concrete Examples — What You Can and Can’t Do

const는 변수 바인딩을 고정할 뿐, 값 자체를 고정하지는 않습니다. 따라서 배열이나 객체의 내용을 변경할 수는 있지만, 변수를 새로운 값으로 재할당할 수는 없습니다.

const numbers = [1, 2, 3];

// ✅ Allowed: mutating the array
numbers.push(4);
numbers[0] = 10;
console.log(numbers); // [10, 2, 3, 4]

// ❌ Not allowed: reassigning the variable
// numbers = [5, 6]; // TypeError: Assignment to constant variable
const person = { name: "Alice", age: 25 };

// ✅ Allowed: modifying properties
person.age = 26;
person.city = "Toronto";
console.log(person); // { name: "Alice", age: 26, city: "Toronto" }

// ❌ Not allowed: reassigning the variable
// person = { name: "Bob" }; // TypeError

이 예시들은 핵심 차이를 보여줍니다: 변수 자체는 상수이지만, 그 변수가 가리키는 데이터는 업데이트될 수 있습니다.

When Immutability Is Needed

앱의 공유 상태나 함수형 프로그래밍처럼 데이터가 절대 변하지 않아야 할 때가 있습니다. const만으로는 변형을 막을 수 없습니다.

// Freeze an object so it can’t be changed
const person = Object.freeze({ name: "Alice", age: 25 });
person.age = 26; // ❌ ignored in strict mode

// Use libraries for deeper immutability
// e.g., Immer or Immutable.js

데이터를 고정하면 버그를 방지하고 코드를 예측 가능하게 만들 수 있습니다.

Conclusion & Best Practices

  • 기본적으로 const를 사용하세요; 이는 변수를 고정할 뿐, 데이터를 고정하지는 않습니다.
  • 배열과 객체는 명시적으로 freeze하지 않는 한 여전히 변할 수 있습니다.
  • 명확한 네이밍과 불변성 패턴을 사용하면 코드가 예측 가능하고 유지 보수가 쉬워집니다.

이 간단한 규칙들을 기억하면 JavaScript가 더 이상 까다롭게 느껴지지 않을 것입니다.

References / Further Reading

Back to Blog

관련 글

더 보기 »