[JavaScript] 얕은 복사와 깊은 복사

2022. 9. 30. 16:48·🍞 FrontEnd/JavaScript

copyUser객체에 user객체를 바로 할당하게 되면 객체가 가리키는 메모리 주소가 같기 때문에

두 객체의 age가 동일하게 변경되는 것을 볼 수 있다.

 

얕은 복사와 깊은 복사로 해결하자!

 

 

📌 얕은 복사(Shallow copy)

빈 객체를 만들어 user객체를 넣거나, 빈 객체에 전개 연산자를 사용하여 값을 넣어준다.

 

그러나 여기서 user.emails는 배열 데이터고, 참조형 데이터이다.

따로 복사 처리를 한 적이 없고, 복사 처리한 것은 user 객체 데이터 하나이기 때문에

새로운 참조형 데이터인 user.emails 배열 데이터는 같은 메모리 주소를 공유하고 있다.

 

이처럼 얕은 복사는 표면만 복사하는 것이기 때문에

내부에 참조형 데이터가 있다면 복사되지 않는 것을 볼 수 있다.

이것을 해결하기 위한 것이 깊은 복사이다!

 

 

📌 깊은 복사(Deep copy)

깊은 복사는 자바스크립트로 직접 구현하기가 매우 복잡하다.

그래서 lodash 패키지를 활용하여 구현하기로 했다!

 

1. lodash 패키지를 설치해준다.

npm i lodash

 

2. lodash 패키지를 import 해준다.

_ 언더바 기호를 하나의 객체 데이터라고 보면 된다.

import _ from 'lodash'

 

3. cloneDeep이라는 메서드를 사용해 깊은 복사를 해준다.

참조 데이터 내부에 참조형 데이터가 있어도 깊게 복사되는 것을 것을 볼 수 있다.

 

 

📌 lodash cloneDeep 공식문서 참고

 

Lodash Documentation

_(value) source Creates a lodash object which wraps value to enable implicit method chain sequences. Methods that operate on and return arrays, collections, and functions can be chained together. Methods that retrieve a single value or may return a primiti

lodash.com

 

저작자표시 (새창열림)

'🍞 FrontEnd > JavaScript' 카테고리의 다른 글

[JavaScript] JavaScript 데이터 실습 - Storage  (0) 2022.10.03
[JavaScript] JavaScript 데이터 실습 - JSON  (0) 2022.10.01
[JavaScript] Ajax 대해서 알아보자!  (0) 2022.09.29
[JavaScript] JavaScript 클래스 - ES6 Classes  (0) 2022.09.24
[JavaScript] JavaScript 클래스 - this  (0) 2022.09.23
'🍞 FrontEnd/JavaScript' 카테고리의 다른 글
  • [JavaScript] JavaScript 데이터 실습 - Storage
  • [JavaScript] JavaScript 데이터 실습 - JSON
  • [JavaScript] Ajax 대해서 알아보자!
  • [JavaScript] JavaScript 클래스 - ES6 Classes
박빵이
박빵이
2025년에도 갓생살기
  • 박빵이
    기억보다 기록
    박빵이
  • 전체
    오늘
    어제
    • 분류 전체보기 (337)
      • 🍞 FrontEnd (97)
        • HTML+CSS (4)
        • JavaScript (17)
        • TypeScript (4)
        • React (52)
        • Next.js (2)
        • Android (15)
      • 🍞 BackEnd (24)
        • Java (15)
        • Node.js (6)
        • Spring (1)
      • 🍞 Cloud & Infra (0)
        • AWS SAA (0)
        • Microsoft Azure (0)
      • 🍞 Algorithm (147)
        • C++ (4)
        • Baekjoon (41)
        • Programmers (97)
      • 🍞 Computer Science (18)
        • 운영체제 (1)
        • 데이터 통신 (6)
        • 네트워크 (6)
        • 데이터베이스 (1)
      • 🍞 대외활동 & 부트캠프 (42)
        • 삼성 청년 SW 아카데미 (1)
        • LG유플러스 유레카 (0)
        • 한국대학생IT경영학회 (1)
        • IT연합동아리 UMC (17)
        • 길벗 블로깅 멘토 (18)
        • IT연합동아리 피로그래밍 (3)
        • 개발 컨퍼런스 (2)
  • 블로그 메뉴

    • Admin
  • 링크

    • GitHub
  • 인기 글

  • 태그

    level2
    유니온파인드
    백준
    umc
    길벗 블로깅 멘토링
    C++
    안드로이드
    react
    Android
    알고리즘
    길벗 블로깅 멘토
    level1
    코딩자율학습
    Front
    JavaScript
    위상정렬
    프로그래머스
    Java
    코틀린
    map
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
박빵이
[JavaScript] 얕은 복사와 깊은 복사
상단으로

티스토리툴바