Lodash._merge와 Defu를 비교하여 알아보는 객체 병합의 차이
2025-01-14 15:20:03Lodash._merge vs Defu: 무엇이 다른가?
코드베이스 아키텍처와 모범 사례를 연구하는 제 입장에서, 이번 포스트에서는 객체 병합을 수행할 때 자주 사용하는 두 가지 라이브러리, lodash._merge 와 Defu 에 대한 차이점을 깊이 있게 분석합니다. 두 라이브러리는 각각의 장단점을 지니고 있어 적절한 용도를 파악하여 활용할 수 있는 능력을 기르는 것이 중요합니다.
Lodash._merge의 특징
lodash._merge는 객체와 배열의 병합 시 강력한 기능을 제공합니다. 공식 문서에 따르면, 이 메서드는 자체 및 상속된 열거 가능한 문자열 속성을 대상 객체로 재귀적으로 병합한다고 설명합니다. 이것은 특히 배열과 순수 객체가 재귀적으로 병합된다는 점에서 큰 장점이 있습니다. 여타 객체 타입이나 값 타입은 단순히 덮어씌워집니다.
var object = {
'a': [{ 'b': 2 }, { 'd': 4 }]
};
var other = {
'a': [{ 'c': 3 }, { 'e': 5 }]
};
_.merge(object, other);
// => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }
Defu의 유연함
Defu는 고도로 효율적이고 경량인 객체 병합 도구로 알려져 있습니다. 정의는 기본 속성을 재귀적으로 할당하는 방식을 사용합니다. 이는 특히 많은 기능이 필요 없는 상태에서 경량의 코드베이스 구현에 큰 도움이 됩니다.
import { defu } from "defu";
console.log(defu({ a: { b: 2 } }, { a: { b: 1, c: 3 } }));
// => { a: { b: 2, c: 3 } }
출처: Defu 공식문서
재귀적 배열 병합의 차이점
lodash._merge는 복잡한 객체 배열의 병합 시에도 강력한 기능을 제공하는 데 반해, Defu는 단순히 객체 병합으로 한정됩니다. Defu를 사용한 배열 병합 결과는 다음과 같습니다:
defu(
{
a: [{ b: 2 }, { d: 4 }],
},
{
a: [{ c: 3 }, { e: 5 }],
}
)
// 결과값: { a: [ { b: 2 }, { d: 4 }, { c: 3 }, { e: 5 } ] }
이는 Defu가 각각의 원소를 개별적으로 추가하므로 결과적으로 더 많은 요소가 포함된 배열을 생성하게 됩니다. 반면, lodash._merge를 사용했을 때 무리 없이 원하는 재귀적 병합을 수행합니다.
어떤 경우에 무엇을 선택할 것인가?
- 경량이 중요한 경우: 필요 이상의 무거운 라이브러리를 피하고 싶다면,
Defu는 훌륭한 옵션입니다. - 보다 복잡한 병합이 필요한 경우: 객체 배열의 구조가 복잡하고, 재귀적으로 깊은 병합이 필요하다면
lodash._merge를 적극 추천합니다.
결론 및 추천 자료
앞서 설명한 두 가지 라이브러리는 저마다의 장단점을 가지고 있으며, 맥락에 따라 적절하게 선택해야 합니다. 프로젝트의 성향과 요구사항에 따라 버전 및 라이브러리를 선택해보세요.
이 포스팅을 통해 각자의 프로젝트에 더 적합한 솔루션을 찾을 수 있기를 바랍니다!