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

[javascript]객체의 키 중에서 숫자 타입의 값을 필터링하고 합산

다음은 주어진 객체의 키 중에서 숫자 타입의 값을 필터링하고 합산하는 예제입니다. const sumNumberValues = (obj) => { return Object.values(obj) ...

당뇨병: 원인, 증상, 진단 및 검사, 치료방법, 예방방법, 식이요법

당뇨병은 인슐린의 분비 혹은 작용에 이상이 생겨 혈당이 지속적으로 높아지는 만성 질환입니다. 인슐린은 췌장에서 분비되는 호르몬으로, 혈액 속의 포도당을 세포로 운반하여 에너지원으로 사용하게 합니다....

[javscript]API 응답에서 키 값들을 검증하는 방법

API 응답에서 다수의 키 값들을 검증할 때 코드의 중복을 줄이는 것은 유지보수성을 향상시키고, 가독성을 높이는 데 중요합니다. 이를 위해 몇 가지 접근 방법을 사용할...

[javscript]특정 키를 제외하고 두 객체를 비교하는 방법

특정 키를 제외하고 두 객체를 비교하는 작업은 데이터의 동등성을 평가하고 싶을 때 유용합니다. Lodash 라이브러리를 통해서 처리할 수 있는 방법에 대해서 살펴보겠습니다. Lodash를 사용한 특정...