배열이나 객체를 복사할 때 일반적으로 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() 같은 유틸을 활용하는 것이 좋습니다.
'개발' 카테고리의 다른 글
자바스크립트 배열 요소 랜덤 선택하기 (0) | 2023.05.07 |
---|---|
useMemo를 사용해서 불필요한 연산 줄이기 (0) | 2023.05.06 |
Array.some() (0) | 2023.03.29 |
Zoom PoC - 화면 공유 중지 시 블랙 스크린 문제 해결 (0) | 2023.03.19 |
전역 상태 관리를 위한 React Query 도입 (0) | 2023.03.19 |