본문 바로가기
개발

🔁 배열과 객체 복사: Object.assign() vs Spread 연산자(...)

by 양현정 2023. 3. 19.

배열이나 객체를 복사할 일반적으로 spread 연산자(...)많이 사용합니다.
하지만 프로젝트에서 Object.assign()사용하는 예제를 발견하면서, 방식의 차이를 정리해보았습니다.


공통점

  • 얕은 복사(shallow copy) 수행합니다.
  • 객체나 배열을 복사하거나 병합사용됩니다.

🧩 차이점 요약

구분 Object.assing() Spread 연산자
방식 함수 호출 문법적 설탕(syntax sugar)
가독성 비교적 직관적 간결하고 직관적
사용성 구버전 JS에서 사용 가능 ES6 이상에서 사용 가능
안전성 번째 인자를 수정할 있음 → 주의 필요 새로운 객체 생성 안전함

📌 사용 예시

🔹 Object.assign

const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };

// 안전하게 복사: 새로운 객체 생성
const result = Object.assign({}, target, source);

console.log(result);
// 출력: { a: 1, b: 4, c: 5 }

참고: Object.assign(target, source)같이 사용할 경우, target 객체가 직접 수정되므로 주의해야 합니다.


🔹 Spread 연산자

const obj1 = { one: '하나', two: '둘' };
const obj2 = { ...obj1, three: '셋' };

console.log(obj2);
// 출력: { one: '하나', two: '둘', three: '셋' }

💡 결론

  • 일반적으로는 spread 연산자사용하는 것이 가독성과 유지보수 측면에서 좋습니다.
  • 다만, 코드의 의미를 명확히 전달하고 싶거나 함수를 기반으로 복사 로직을 구성해야 Object.assign()사용하는 것도 좋은 선택입니다.
  • 방식 모두 깊은 복사를 지원하지 않기 때문에, 중첩된 객체가 있는 경우에는 lodash.cloneDeep() 같은 유틸을 활용하는 것이 좋습니다.