[TIL] const

동찌·2023년 4월 3일

const란?

const는 JavaScript에서 변수를 선언하는 키워드 중 하나인데, 상수를 선언하기 위해 사용합니다.
하지만 반드시 상수만을 위해 사용하지는 않습니다.

특징

  • const 키워드로 선언한 변수는 반드시 선언과 동시에 초기화해야 합니다.
    그렇지 않으면 문법에러가 발생하며 TDZ에 빠지게 됩니다.
  • var 또는 let 키워드로 선언한 변수는 재할당이 자유로우나 const 키워드로 선언한 변수는 재할당이 금지됩니다.
  • 원시 값을 할당한 경우에 변수 값을 변경할 수 없습니다. 이러한 특징을 이용해 상수를 표현하는 데 사용하기도 합니다.
    상수는 프로그램 전체에서 공통적으로 사용하므로 나중에 값이 변경되면 상수만 변경하면 되기 때문에 유지보수성이 대폭 향상됩니다.
    일반적으로 대문자로 선언하여 상수임을 명확히 나타냅니다.
  • const 키워드로 선언된 변수에 원시 값을 할당한 경우 값을 변경할 수 없습니다. 하지만 객체를 할당한 경우 값을 변경할 수 있습니다.재할당을 금지할 뿐 불변을 의미하지는 않기 때문에, 객체는 재할당 없이도 직접 요소나 속성을 변경할 수 있습니다. 이 때 객체가 변경되더라도 변수에 할당된 참조 값은 변경되지 않습니다.

기술면접 질문

Q. 배열, 객체를 const로 선언했는데 요소나 속성을 추가할 수 있는 이유에 대해서 설명해주세요.

const 키워드는 재할당을 금지할 뿐 불변을 의미하지는 않기 때문에, 객체는 재할당 없이도 직접 요소나 속성을 변경할 수 있습니다. 이 때 객체가 변경되더라도 변수에 할당된 참조 값은 변경되지 않습니다.

GPT선생님이 알려준 예상 꼬리 질문

1. const로 선언된 객체를 변경하거나 속성을 추가하는 것은 안전한가요?
const로 선언된 객체를 변경하거나 속성을 추가하면, 해당 객체의 참조 값이 변경되는 것이 아니라 객체 내부의 값이 변경되는 것이므로, 다른 코드에서 객체를 참조하고 있을 경우 예기치 않은 결과가 발생할 수 있습니다.
따라서 const로 선언된 객체를 변경하거나 속성을 추가하는 것은 권장되지 않습니다. 대신 객체를 복사하여 새로운 객체를 생성한 후, 그 객체를 수정하거나 속성을 추가하는 방법을 사용할 수 있습니다. 이를 통해 객체를 변경할 때 발생할 수 있는 예기치 않은 부작용을 방지할 수 있습니다.

2. const로 선언된 배열이나 객체를 수정하면 다른 부분에서 문제가 발생할 가능성이 있나요?
const로 선언된 배열이나 객체는 해당 변수의 참조 값이 변하지 않는 것이 보장됩니다. 그러나 배열이나 객체의 내용은 변경 가능하므로, const로 선언된 배열이 다른 함수에서 참조되고 있다면, 해당 배열을 수정하면 함수의 결과가 변경될 수 있습니다.

3. const로 선언된 객체를 변경하면, 객체 내부의 속성은 변경되지만, 객체 자체의 불변성은 유지되나요?
const로 선언된 객체는 객체가 참조하는 메모리 주소가 고정되기 때문에, 객체 자체는 불변입니다. 따라서 객체를 재할당하지 않는 한, const로 선언된 객체의 참조 값은 변경할 수 없습니다.

4. const로 선언된 객체의 속성을 변경하면, 객체 내부에서 해당 속성을 참조하고 있는 코드는 어떻게 동작하나요?
const로 선언된 객체의 속성을 변경하면, 객체 내부에서 해당 속성을 참조하고 있는 코드는 변경된 값으로 동작합니다. 즉, 객체의 속성이 변경되면 해당 객체를 참조하는 모든 코드에서 변경된 값을 사용하게 됩니다.

5. const로 선언된 객체를 전달받은 함수에서 객체를 수정하면, 호출한 함수에서도 객체가 변경되는 건가요?
객체를 전달하는 경우, 실제로 전달되는 것은 객체의 참조입니다. 즉, 객체를 참조하는 변수는 객체의 메모리 주소를 가리키고 있기 때문에, 함수 내에서 변수가 참조하는 메모리 주소를 통해 객체를 수정하면, 호출한 함수에서도 같은 객체를 참조하고 있으므로 객체의 변경 사항이 반영됩니다.

0개의 댓글