Home IT/WEB cloneDeep, clone 메소드를 사용한 객체의 깊은 복사와 얕은 복사 방법

[lodash] cloneDeep, clone 메소드를 사용한 객체의 깊은 복사와 얕은 복사 방법

객체를 복사할 때 얕은 복사와 깊은 복사는 중요한 개념입니다. 얕은 복사는 원본 객체와 복사된 객체가 같은 메모리 주소를 참조하며, 깊은 복사는 원본 객체와 복사된 객체가 서로 다른 메모리 주소를 참조하는 것입니다. Lodash의 clone 메소드와 cloneDeep 메소드를 활용하여 객체의 얕은 복사와 깊은 복사하는 방법에 대해서 알아보겠습니다.

객체의 얕은 복사 clone()

inline ad

Lodash에서 제공하는 clone 메소드는 얕은 복사 기능을 수행합니다. 이는 원본 객체의 속성을 복사하여 새로운 객체를 생성하지만, 하위 객체는 참조 관계를 유지한다는 의미입니다. 그러므로 원본 객체와 복사된 객체가 같은 메모리 주소를 참조할 수도 있습니다.

const _ = require('lodash');

const originalObject = {
  name: 'Lee',
  age: 18,
  address: {
    city: 'seoul',
    country: 'KOREA'
  }
};

// 객체의 얕은 복사
const shallowCopyObject = _.clone(originalObject);

// 원본 객체와 복사된 객체 비교
console.log(originalObject === shallowCopyObject); // false

// 하위 객체는 참조 관계를 유지
console.log(originalObject.address === shallowCopyObject.address); // true

위 예제에서 clone 메소드를 사용하여 originalObject를 shallowCopyObject로 얕은 복사한 결과, 두 객체는 서로 다른 메모리 주소를 참조합니다. 하지만 address 속성의 하위 객체는 참조 관계를 유지하여 같은 메모리 주소를 가리키고 있습니다.

객체의 깊은 복사, cloneDeep()

lodash 메소드 중에서 제일 많이 사용하는 cloneDeep 메소드는 깊은 복사 기능을 수행합니다. 깊은 복사는 원본 객체의 모든 속성과 하위 객체들을 재귀적으로 복사하여 새로운 객체를 생성합니다. 따라서 원본 객체와 복사된 객체는 서로 다른 메모리 주소를 참조하게 됩니다.

const _ = require('lodash');

const originalObject = {
  name: 'Lee',
  age: 18,
  address: {
    city: 'seoul',
    country: 'KOREA'
  }
};

// 객체의 깊은 복사
const deepCopyObject = _.cloneDeep(originalObject);

// 원본 객체와 복사된 객체 비교
console.log(originalObject === deepCopyObject); // false

// 하위 객체도 새로운 객체로 생성하여 참조 관계 유지하지 않음
console.log(originalObject.address === deepCopyObject.address); // false

위 예제에서 cloneDeep 메소드를 사용하여 originalObject를 deepCopyObject로 깊은 복사한 결과, 두 객체는 서로 다른 메모리 주소를 참조합니다. 또한 address 속성의 하위 객체도 새로운 객체로 생성되어 참조 관계를 유지하지 않습니다.

RECENT POSTS

개미를 퇴치하는 자연적인 방법 중 가장 효과적인 방법 6가지

개미를 자연스럽게 퇴치하는 여러 가지 방법 중 가장 효과적인 몇 가지 방법을 소개하겠습니다. 이 방법들은 모두 집에서 쉽게 구할 수 있는 재료를 사용하여 개미를...

부심장을 지키는 올바른 식단: 먹으면 좋은 음식과 나쁜 음식

부정맥 환자는 심장 건강을 유지하고 증상을 관리하기 위해 특정 음식을 피하고, 심장 건강에 좋은 음식을 섭취하는 것이 중요합니다. 다음은 부정맥 환자가 피해야 나쁜 음식과...

부정맥 arrhythmia: 정의, 원인, 증상, 진단 및 검사, 치료 방법, 예방 방법, 주의사항, 생활 습관

정의 부정맥(Arrhythmia)은 심장의 정상적인 리듬이 불규칙해지거나 비정상적으로 빨라지거나 느려지는 상태를 말합니다. 이는 심장의 전기적 신호 전달에 문제가 생겨 발생하며, 다양한 원인과 증상을 가지고 있습니다. 원인 부정맥의 원인은...

폐렴 pneumonia: 정의, 원인, 증상, 진단 및 검사, 치료 방법, 예방 방법, 주의사항, 생활 습관

정의 폐렴(Pneumonia)은 폐의 폐포(air sacs)에 염증이 생겨 액체나 고름이 차는 질환입니다. 주로 세균, 바이러스, 곰팡이 등의 감염에 의해 발생하며, 심한 경우 생명을 위협할 수 있습니다. 원인 폐렴의...