개발하다 보면 아래와 같은 코드들이 보인다.
const tmp: Channel[] = JSON.parse(JSON.stringify(channels))
이 의미를 알 지 못한다면, 왜 불필요한 작업을 진행하는지 이해 할 수 없다.
stringify와 parse는 연산 속도도 느린데...
이 패턴은 객체를 깊은 복사를 하기 위해 사용하는 방법
이 과정을 거치면 원본 객체의 참조와 완전히 끊어진 새로운 객체가 만들어 진다.
얕은 복사(shallow copy)
const copy = [...array] 나 const copy = {...obj} 처럼 spread나 Object.assigin을 쓰면 1단계 깊이까지 복사되고, 그 안에 있는 개체나 배열은 여전히 원본과 같은 참조를 가진다.
const a = [{x: 1}];
const b = [...a]; // b[0]는 a[0]과 같은 객체를 참조
a[0].x = 999;
console.log(b[0].x); // 999 (둘 다 같은 객체를 가리킴)
깊은 복사(deep copy)
중첩된 객체/배열까지 새로 만들어서 완전히 복사합니다. 그래서 복사본을 수정해도 원본에 영향이 없습니다.
'IT > web' 카테고리의 다른 글
[JS] forEach, "사이드 이펙트(side effect)"가 있을 때만 사용하자 (3) | 2025.07.04 |
---|---|
[요약정리] 접근성 작업을 도와주는 ESLint plugin 개발기 / if(kakaoAI)2024 (0) | 2025.02.19 |
[요약정리] 웹 성능 게이트 키퍼: 웹 성능 모니터링 서비스, '파루스' 의 기술과 활용 / if(kakaoAI)2024 (0) | 2025.02.19 |
[요약정리] 서비스 UX는 내가 직접 지킨다: 웹 이미지 뷰어 '포커스' 개발 및 적용기 / if(kakaoAI)2024 (0) | 2025.02.16 |
[web] tree-shaking 요약 (0) | 2024.10.27 |