📌 자바스크립트에서 == 와 === 가 어떻게 다른지 설명해 주세요.
==
(동등 연산자, equal)
- 두 피연산자의 값이 서로 같으면 참(true)을 반환합니다.
- 타입이 서로 다를 경우 강제 형변환 과정을 통해 연산자들을 공통 타입으로 만들고 그 안에 있는 값만을 비교하는 '느슨한 비교'를 합니다.
===
(일치 연산자, strict equal)
- 타입의 변환 없이 두 피연산자의 값이 같고, 타입도 같아야만 참(true)을 반환합니다.
- 형변환 과정을 수행하지 않는 '엄격한 비교'를 합니다.
- 안전한 코드를 작성하기 위해서는 일치 연산자를 사용해야 합니다.
📌 자바스크립트에서 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy)에 대해 설명해 주세요.
얕은 복사(Shallow Copy)
- 객체를 복사할 때 원본 값과 복사된 값이 같은 참조(=메모리 주소)를 가리키는 것을 의미합니다.
- 얕은 복사 후 해당 변수를 재사용하여 수정한다면 원본 값이 동시에 변하므로 주의해야 합니다.
- Object.assign()을 이용하면 객체 자체는 깊은 복사가 수행되지만, 2차원 이상의 객체는 얕은 복사가 수행되므로 주의해야 합니다.
- Array.prototype.slice()
- Object.assign()
- Spread 연산자
깊은 복사(Deep Copy)
- 복사된 객체가 다른 주소를 참조하며 내부의 값만 복사된다.
- JSON.parse && JSON.stringify
원시값과 참조값이란?
원시값
: Number, String, Boolean, Null, Undefined, Symbol
- 변수에 원시값을 저장하면 변수의 메모리 공간에 실제 데이터 값이 저장됩니다. 할당된 변수를 조작하려고 하면 저장된 실제 값이 조작됩니다.
- 복사할 때 그 값은 또 다른 독립적인 메모리 공간에 할당하기 때문에, 복사를 하고 값을 수정해도 기존 원시값을 저장한 변수에는 영향을 끼치지 않습니다. = '깊은 복사'
참조값
: Object
- 여러 자료형으로 구성되는 메모리에 저장된 객체입니다.
- 변수에 저장된 메모리 공간의 참조(위치 값)를 저장합니다.
- 변수가 객체의 참조를 가리키고 있기 때문에 복사된 변수 또한 객체가 저장된 메모리 공간의 참조를 가리키고 있습니다. = '얕은 복사'