얕은 복사, 깊은 복사
얕은복사: 복사본의 속성이 복사본이 만들어진 원본 객체와 같은 참조를 공유하는 복사입니다. 따라서 원본이나 복사본을 변경하면, 다른 객체 또한 변경될 수 있습니다.
깊은복사: 복사본의 속성이 복사본이 만들어진 원본 객체와 같은 참조를 공유하지 않는 복사입니다. 따라서 원본이나 복사본을 변경할 때, 다른 객체가 변경되지 않는 것을 보장할 수 있습니다.
얕은 복사의 문제점
-복사본 내부의 중첩된 객체를 수정하면 원본 객체도 함께 변경됩니다.
깊은 복사는 Javascript에서 JSON 객체를 활용하여 해결(함수, undefined, symbol등을 복사 못함)
1.직렬화:객체 정보를 문자열로 변환합니다. 이 과정에서 기존의 모든 참조 관계가 끊어지고 단순 텍스트가 됩니다.
2.역직렬화:문자열을 다시 새로운 객체로 조립합니다. 이때 완전히 새로운 메모리 주소를 할당받으므로 깊은 복사가 완료됩니다.
프론트엔드(브라우저) 와 서버간의 통신에서 json이 사용되고 직렬화와 역직렬화가 사용되는 이유
-데이터 선형화: 컴퓨터 메모리 속 객체는 사방에 흩어진 주소 덩어리입니다. 이를 네트워크를 통해 보내려면 데이터 스트림(문자열) 형태여야 합니다.
-이종 시스템 간 호환: 서버가 달라도, JSON이라는 표준화된 문자열 규격을 사용하면 쉽게 자기 언어의 객체로 바꿀 수 있습니다.
자바스크립트의 또 다른 직렬화 기술
-structuredClone(): 최신 브라우저와 Node.js의 내장 함수로, JSON보다 빠르고 함수 외 대부분의 타입을 완벽하게 깊은 복사합니다. (현재 가장 권장되는 방식)
-Spread Operator (...): [...array]와 같은 문법. 사용이 간편하지만 1단계 깊이까지만 복사되는 얕은 복사입니다.
-Lodash (_.cloneDeep): 실무 라이브러리에서 가장 안정적으로 깊은 복사를 지원하는 유틸리티 함수입니다.
댓글
댓글을 작성하려면 이 필요합니다.