const로 배열이나 객체를 선언하면, 배열이나 객체 자체에 대한 주소값을 변경할 수 없습니다. 즉, 다른 배열이나 객체로 다시 할당할 수 없게 됩니다. 하지만, 배열의 요소나 객체의 속성은 여전히 수정할 수 있습니다. 이는 자바스크립트에서 const는 참조에 대한 상수성(constancy)을 보장하기 때문입니다. 객체나 배열의 내용은 바뀔 수 있지만, 선언된 변수가 항상 같은 객체나 배열을 참조하도록 보장합니다.
const arr = [1, 2, 3];
arr.push(4); // 가능합니다. arr에 요소 추가
arr[0] = 10; // 가능합니다. arr의 첫 번째 요소를 변경
arr = [5, 6, 7]; // 오류 발생! arr에 다른 배열을 할당하려고 했습니다.
const obj = { a: 1, b: 2 };
obj.c = 3; // 가능합니다. obj에 속성 추가
obj.b = 4; // 가능합니다. obj의 b 속성 값을 변경
obj = { a: 1, b: 2, c: 3 }; // 오류 발생! obj에 다른 객체를 할당하려고 했습니다.
질문: 객체와 배열을 const로 선언하면 어떤 것이 불변이 되는지 명확하게 설명해주세요.
답변: 객체와 배열을 const로 선언하면 변수의 참조가 불변이 되어, 변수에 새로운 객체나 배열을 할당할 수 없습니다. 하지만, 객체의 속성과 배열의 요소는 수정할 수 있습니다.
질문: let이나 var로 선언한 객체와 배열은 어떻게 다른지 설명해주세요.
답변: let이나 var로 선언한 객체와 배열은 재할당이 가능합니다. 즉, 변수에 다른 객체나 배열을 할당할 수 있습니다. 하지만 객체의 속성과 배열의 요소도 수정할 수 있습니다.
질문: const로 객체나 배열을 불변하게 만들려면 어떻게 해야 하는지 설명해주세요.
답변: 객체를 완전히 불변하게 만들려면 Object.freeze() 함수를 사용하면 됩니다. 배열의 경우, 다양한 방법이 있지만 Spread 연산자와 Array.prototype.concat 등을 사용해 기존 배열을 수정하지 않고 새로운 배열을 만드는 방법이 있습니다.
질문: 배열을 다룰 때, const와 함께 사용할 수 있는 빌트인 메서드는 어떤 것들이 있나요?
답변: 배열과 함께 사용할 수 있는 const-friendly 메서드로는 Array.prototype.map(), Array.prototype.filter(), Array.prototype.slice() 등이 있습니다. 이러한 메서드들이 공통적으로 기존 배열을 수정하지 않고 새로운 배열을 반환합니다.
질문: const 객체의 속성을 추가, 수정, 삭제하기에 가장 안전한 방법은 무엇인가요?
답변: const 객체의 속성을 추가, 수정, 삭제하려면, 객체를 복사하고 새 속성을 추가, 수정, 삭제한 새 객체를 반환하는 것이 안전합니다. 이를 위해 스프레드 연산자(...) 또는 Object.assign() 함수를 사용할 수 있습니다.
질문: 객체나 배열을 const로 선언할 때 주의할 점은 무엇인가요?
답변: const로 선언된 객체나 배열은 참조 불변성을 가지므로, 새로운 참조를 할당하려 할 때 에러가 발생합니다. 또한, 객체나 배열 내부의 속성이나 요소를 의도치 않게 변경할 수 있으므로, 코드에서 불변성을 강제하고 싶다면 명시적으로 데이터를 복사하거나 불변성 준수를 도와주는 라이브러리를 사용하는 것이 좋습니다.
질문: const 객체의 중첩 속성을 수정하려면 어떻게 해야 하는지 설명해주세요.
답변: 중첩된 객체의 속성을 수정하려면 객체를 기존 객체와 변경 내용을 포함한 새 객체로 병합해야 합니다. 이를 위해 Spread 연산자를 이용한 비구조화 할당(destructive assignment)이나 Object.assign()과 같은 함수를 사용할 수 있습니다.
'면접준비' 카테고리의 다른 글
Cookie의 MaxAge, Expires 옵션이 무엇인지, 설정하지 않으면 어떻게 되는지 설명해주세요. (0) | 2023.07.27 |
---|---|
useRef가 필요한 상황 (0) | 2023.07.27 |
require와 import차이점을 설명 (0) | 2023.07.26 |
브라우저 저장소에 대해서 차이점(local storage, sessin storage, cookie) (0) | 2023.07.25 |
this 가 동작하는 원리와 용법 (0) | 2023.07.25 |