Notice
Recent Posts
Recent Comments
Link
250x250
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- legacy-peer
- 이미지반응형
- minwidth
- Git clone
- 동적객체
- npm install
- 아이콘사용법
- fontawesome
- 플러그인
- node설치
- 의존성문제
- 그누보드반응형
- googleicon
- MediaQuery
- owlcarousel
- 단어단위로떨어지기
- git lab clone
- maxwidth
- vscode git clone
- slickslider
- package.json
- npm install 문제
- XEIcon
- npm start
- 웹아이콘
- react npm install
- 정적객체
- node 오류
- window 정책변경
- 글자들여쓰기
Archives
- Today
- Total
어쩌다 알게 된 ƪ(•̃͡•̃͡ ƪ
[문법] 얕은 복사와 깊은 복사가 뭐지?? 본문
728x90
앞에 글에서 스프레드 연산자를 공부하다보니 얕은 복사라는 말이 나왔다.
[문법] state 사용, 스프레드 연산자
1. 함수로 만들어서 onClick 안에 넣기-> 눌러봐를 누르면 {좋아요}의 값이 + 1 씩 증가하고, 초기화를 누르면 {좋아요} 값이 0이 된다.import { useState } from 'react'function App() { let post = '강남'; //변수 let [
dazzle-bini.tistory.com

그게 뭐지?? 하고 찾아보니
스프레드 연산자의 단점이라고 할 수 있는 중첩된 객체나 배열까지는 복사되지 않는다는 것!
이 문제점을 해결 할 수 있는 것이 깊은 복사이다!
얕은 복사 vs 깊은 복사
구분얕은 복사깊은 복사
| 복사 수준 | 최상위 수준만 복사 | 모든 중첩 구조까지 복사 |
| 참조 공유 | 중첩된 객체나 배열은 원본과 참조를 공유 | 원본과 완전히 독립적 |
| 사용 예시 | ...(스프레드 연산자), Object.assign, slice | JSON.parse(JSON.stringify(obj)), lodash 등 |
| 원본 영향 | 중첩 객체를 수정하면 원본에도 영향을 줌 | 원본에 전혀 영향을 주지 않음 |
// 얕은 복사
let original = { x: 1, y: { z: 2 } };
let shallowCopy = { ...original };
shallowCopy.x = 100; // 복사본의 x 값 변경
console.log(original); // { x: 1, y: { z: 2 } } -> 원본에는 영향 없음
shallowCopy.y.z = 300; // 복사본의 중첩 객체 수정
console.log(original); // { x: 1, y: { z: 300 } } -> 원본에도 영향을 줌
// 깊은 복사 (JSON 방법)
let original = { x: 1, y: { z: 2 } };
let deepCopy = JSON.parse(JSON.stringify(original));
deepCopy.y.z = 300; // 복사본의 중첩 객체 수정
console.log(original); // { x: 1, y: { z: 2 } } -> 원본은 영향 없음
// 깊은 복사2 (유틸 라이브러리 사용-> lodash 사용)
import _ from 'lodash';
let original = { x: 1, y: { z: 2 } };
let deepCopy = _.cloneDeep(original);
deepCopy.y.z = 100; // 복사본 수정
console.log(original); // { x: 1, y: { z: 2 } } -> 원본에는 영향 없음
console.log(deepCopy); // { x: 1, y: { z: 100 } } -> 복사본만 변경됨
lodash는 라이브러리를 사용하는 것이기 때문에 설치하여 사용해야 한다.!
설치 명령어: npm install lodash
- 간단한 경우에는 JSON 방법을 사용할 수 있지만, 복잡한 데이터 구조를 다룰 때는 Lodash가 훨씬 안전하고 유용
- Lodash를 설치하지 않고도 재귀적으로 깊은 복사를 구현할 수 있지만, 직접 구현하는 대신 검증된 라이브러리를 사용하는 것이 일반적으로 더 좋음
얕은 복사는 빠르고 간단하여 많이 쓰이지만 이런 특징을 잘 알고, 중첩 구조를 다뤄야 할 때는 깊은 복사를 사용하면 될 것 같다!

728x90
'개발 > 🟦 React' 카테고리의 다른 글
| [문법] 컴포넌트와 props (3) | 2025.01.04 |
|---|---|
| [함수] sort() 오름차순, 내림차순 정렬하기 (4) | 2025.01.04 |
| [문법] state 사용, 스프레드 연산자 (1) | 2025.01.03 |
| [기초] 문법 (0) | 2025.01.03 |
| [작업 환경] node.js (2) | 2025.01.02 |
Comments
