TIL 15

go__rAnii·2022년 2월 3일

TIL

목록 보기
15/35

얕은 복사 vs 깊은 복사

객체/ 배열 복사시 원본 데이터도 바뀌는 이유는 객체나 배열을 할당 혹은 저장하는 경우 데이터를 배열의 주소에 저장하므로 배열 a에서 복사해온 배열 b의 데이터는 a의 '주소'만을 복사해온다.
따라서 데이터 aaa가 아니라 주소(인덱스) 값을 공유하므로 주소 내부의 데이터가 바뀌면 해당 주소를 공유하고있는 배열 a, b 모두 바뀌는 것.

배열이나 객체를 원본 데이터 손실없이 한번에 복사하는 방법은 없으나 새로운 배열을 선언하고 그 곳에 배열 a의 데이터를 담아주면 같은 형식을 가진 배열을 얻을 수 있다.
그러나 이 방법은 오히려 번거롭기 떄문에 스프레드 연산자를 이용해 편하게 사용이 가능하다.
스프레드 연산자는 새로운 주소값을 가지기 때문에 원본 데이터가 바뀔 위험이 없다

...인 줄 알았으나 객체 안에서 새롭게 객체를 할당하는 경우 복사된 배열 b의 데이터를 변경하는 경우 원본 a의 데이터도 바뀐다.

얕은 복사 (Shallow-Copy)
depth가 1일때만 복사가 된다.
깊이가 2이상이라면 원본 데이터 변형 위험이 있으니 사용시 주의할 것.

깊은 복사 (Deep-Copy)
객체나 배열의 데이터를 전부 문자열로 바꾸고 그 결과 값인 문자열을 다시 객체에 할당한다.
즉, 새로운 객체를 생성하는 것

0개의 댓글