본문 바로가기
개발 용어 정리

[개발용어] 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy)

by minhyeok.lee 2023. 2. 16.
반응형

얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy)

A = 원본

B = 복사하려는 객체

 

얕은 복사

새로운 B객체를 생성 후 원본 A객체를 메모리 영역을 참조해서 원본에 종속된 객체를 생성하는 것이 얕은 복사이다.

서로 같은 메모리 영역을 참조하므로 독립적이지 못하고 A와 B는 서로 영향을 받는다.

 

예시 코드)

let A = ["a", "b", "c"];
let B = A;

A[0] = "d";

console.log('A = ', A, 'B = ', B);

B[2] = "z";

console.log('A = ', A, 'B = ', B);

 

출력값

A = ["d", "b", "c"] B = ["d", "b", "c"]
A = ["d", "b", "z"] B = ["d", "b", "z"]

A와 B는 서로 독립적이지 않은 객체인 것을 볼 수 있다.

 

 

 

깊은 복사

새로운 B객체를 생성 후 원본 A객체를 통째로 복사해서 독립적인 새로운 객체를 메모리 영역에 생성하는 것이 깊은 복사이다.

서로 다른 메모리 영역을 참조하는 독립적인 객체이므로 A와 B는 서로 영향을 받지 않는다.

 

예시 코드) js의 spread를 사용한 깊은 복사

let A = ["a", "b", "c"];
let B = [...A];

A[0] = "d";

console.log('A = ', A, 'B = ', B);

B[2] = "z";

console.log('A = ', A, 'B = ', B);

 

출력값

A = ["d", "b", "c"] B = ["a", "b", "c"]
A = ["d", "b", "c"] B = ["a", "b", "z"]

A와 B는 완전 독립된 객체인 것을 볼 수 있다.

 

 

결론: 일반적으로 우리가 생각하는 복사는 깊은 복사를 해주면 된다.

반응형

댓글