javascript의 얕은복사, 깊은복사
얕은 복사의 문제점
얕은 복사는 객체의 겉만 복사하고 내부 참조는 공유한다.
그래서 복사본을 수정했는데 원본 데이터까지 같이 바뀌는 버그가 생긴다.
특히 중첩 객체가 많을수록 의도치 않은 사이드 이펙트가 커진다.
디버깅이 어렵고, 상태 관리에서 치명적이다.
JavaScript에서 깊은 복사는 어떻게 하나?
가장 기본적인 방법은 JSON.parse(JSON.stringify(obj))이다.
객체를 문자열(JSON)로 바꿨다가 다시 객체로 만들어 완전히 분리한다.
하지만 함수, Date, Map, Set, undefined 같은 값은 손실된다.
그래서 만능은 아니고 단순 데이터용으로 적합하다.
깊은 복사를 그나마 쉽게 해주는 기술
요즘은 **structuredClone()**이 가장 깔끔한 방법이다.
브라우저/Node에서 제공하며 깊은 복사를 안전하게 처리한다.
Date, Map, Set도 지원하고 JSON 방식의 한계를 보완한다.
단, 오래된 환경에서는 지원이 안 될 수 있다.
프론트엔드–서버 통신에서 JSON + 직렬화를 쓰는 이유
서로 다른 언어와 환경이 통신해야 하므로 공통 포맷이 필요하다.
JSON은 문자열 기반이라 네트워크로 전송하기 쉽다.
직렬화는 객체 → 문자열, 역직렬화는 문자열 → 객체 변환 과정이다.
이 덕분에 데이터 구조를 유지한 채 통신할 수 있다.
JavaScript의 직렬화/역직렬화는 하나뿐일까?
아니다. JSON.stringify / parse는 가장 흔한 방법일 뿐이다.
structuredClone, MessagePack, Protocol Buffers 같은 방식도 있다.
이들은 성능, 용량, 타입 보존 측면에서 JSON보다 강점이 있다.
상황에 따라 JSON이 아닌 방식을 쓰기도 한다
25
홍정빈
댓글
댓글을 작성하려면 이 필요합니다.