[javascript] 객체 할당 방법: 얕은 복사 vs 깊은 복사.

자바스크립트에서 객체를 할당하는 방법은 얕은 복사(shallow copy)와 깊은 복사(deep copy) 두 가지가 있습니다. 이러한 할당 방법은 객체를 복사할 때 참조 혹은 복사하여 새로운 객체를 생성하는 것에 영향을 미칩니다.

얕은 복사 (Shallow Copy)

얕은 복사는 객체를 복사할 때 객체의 일부만 복사하고, 다른 부분은 원본 객체의 참조를 그대로 유지합니다. 즉, 복사된 객체와 원본 객체가 같은 참조를 가리키는 경우가 발생합니다. 이로 인해 복사된 객체에서 원본 객체의 값을 변경하면 원본 객체에 영향을 줄 수 있습니다.

얕은 복사는 Object.assign()이나 전개 연산자(...)를 사용하여 수행할 수 있습니다.

예제:

const obj1 = { a: 1, b: { c: 2 } };
const obj2 = Object.assign({}, obj1);

obj2.b.c = 3;

console.log(obj1.b.c); // 출력 결과: 3

깊은 복사 (Deep Copy)

깊은 복사는 객체를 복사할 때 객체의 모든 내용을 재귀적으로 복사하여 새로운 객체를 생성합니다. 이렇게 하면 복사된 객체와 원본 객체가 서로 독립적으로 동작하며, 한쪽에서 값이 변경되어도 다른 쪽에는 영향을 주지 않습니다.

깊은 복사를 수행하기 위해서는 JSON.parse()JSON.stringify()를 함께 사용하거나, 외부 라이브러리(예: Lodash의 _.cloneDeep())를 이용할 수 있습니다.

예제:

const obj1 = { a: 1, b: { c: 2 } };
const obj2 = JSON.parse(JSON.stringify(obj1));

obj2.b.c = 3;

console.log(obj1.b.c); // 출력 결과: 2

얕은 복사와 깊은 복사는 각각의 장단점을 가지고 있으며, 상황에 맞게 적절히 활용해야 합니다. 객체를 복사할 때는 두 가지 방식을 이해하고 적절히 선택하여 사용하는 것이 중요합니다.

참고 자료