JavaScript Object.assign()은 객체를 병합하는 데 사용되는 메소드입니다. 이 메소드를 사용하면 하나 이상의 객체를 대상 객체로 병합하여 대상 객체를 업데이트하거나 새 객체를 생성할 수 있습니다.

JavaScript 객체란?

JavaScript 객체는 키와 값 쌍의 집합으로 구성됩니다. 이러한 쌍을 속성(property) 또는 멤버(member)라고도 합니다. 객체는 중괄호({})로 묶인 속성 목록으로 정의됩니다.

예를 들어, 다음과 같이 개체를 정의할 수 있습니다.

let person = {
  name: 'John',
  age: 30
};

JavaScript Object.assign() 메소드란?

Object.assign() 메소드는 대상 객체와 하나 이상의 출처 객체를 받아서 대상 객체를 업데이트하거나 새 객체를 반환합니다. 대상 객체는 첫 번째 매개 변수로 지정되며, 출처 객체는 두 번째 이후 매개 변수로 지정됩니다. 대상 객체는 출처 객체의 속성을 상속받으며, 동일한 속성 이름을 가진 출처 객체의 속성은 대상 객체의 속성으로 덮어씁니다.

예를 들어, 다음과 같이 대상 객체와 출처 객체를 정의할 수 있습니다.

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

다음과 같이 Object.assign() 메소드를 사용하여 대상 객체를 업데이트하거나 새 객체를 반환할 수 있습니다.

let result = Object.assign(target, source);

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

이 예제에서는 대상 객체(target)와 출처 객체(source)가 정의됩니다. Object.assign() 메소드는 대상 객체에 출처 객체의 속성을 병합합니다. 이 때, 대상 객체와 출처 객체가 동일한 속성(b)을 가질 경우, 출처 객체의 속성이 대상 객체의 속성으로 덮어씁니다. 최종적으로 업데이트된 대상 객체는 target과 result 두 변수 모두에서 사용할 수 있습니다.

객체 병합에 대한 더 많은 예제를 살펴보겠습니다.

예제 1: 객체의 속성 병합

다음 예제에서는 두 개의 객체를 병합하여 새 객체를 생성합니다.

let person = { name: 'John', age: 30 };
let info = { occupation: 'teacher', location: 'New York' };

let profile = Object.assign(person, info);

console.log(profile); // { name: 'John', age: 30, occupation: 'teacher', location: 'New York' }

이 예제에서는 person과 info 두 객체를 병합하여 새 객체 profile을 생성합니다. Object.assign() 메소드를 사용하여 person 객체에 info 객체의 속성을 추가합니다. 새로운 profile 객체는 person 객체와 info 객체의 속성을 모두 포함하고 있습니다.

예제 2: 객체의 속성 갱신

다음 예제에서는 두 개의 객체를 병합하여 대상 객체를 업데이트합니다.

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

Object.assign(target, source);

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

이 예제에서는 target과 source 두 객체를 병합하여 target 객체를 업데이트합니다. Object.assign() 메소드를 사용하여 target 객체에 source 객체의 속성을 추가합니다. b 속성의 값은 출처 객체인 source의 값으로 대체됩니다.

예제 3: 객체의 속성 복제

다음 예제에서는 대상 객체를 복제하여 새 객체를 생성합니다.

let source = { a: 1, b: 2 };
let clone = Object.assign({}, source);

console.log(clone); // { a: 1, b: 2 }

이 예제에서는 source 객체를 복제하여 새 객체 clone을 생성합니다. Object.assign() 메소드를 사용하여 빈 객체를 대상 객체로 지정하면 source 객체를 복제할 수 있습니다. 새로운 clone 객체는 source 객체와 동일한 속성을 가지고 있습니다.

FAQ

  1. Object.assign() 메소드를 사용할 때 출처 객체가 여러 개인 경우, 어떤 출처 객체의 속성이 우선적으로 사용될까요?
  • Object.assign() 메소드는 출처 객체가 왼쪽에서 오른쪽으로 평가되므로, 마지막 출처 객체의 속성이 우선적으로 사용됩니다.
  1. Object.assign() 메소드를 사용하여 병합한 객체는 어떻게 업데이트할 수 있나요?
  • 병합된 객체는 일반 객체와 마찬가지로 속성을 직접 업데이트하거나, Object.assign() 메소드를 사용하여 업데이트할 수 있습니다.
  1. Object.assign() 메소드를 사용할 때 객체를 복제할 수 있나요?
  • Object.assign() 메소드는 대상 객체를 업데이트하는 것 외에도, 새 객체를 생성하여 반환할 수 있습니다. 대상 객체의 복제본을 생성하려면 빈 객체를 대상 객체로 지정하면 됩니다.
  1. Object.assign() 메소드를 사용할 때 어떤 속성이 복제되지 않나요?
  • Object.assign() 메소드는 속성의 값을 복제하는 것이므로, 속성의 열거 가능 여부와 속성 설명자를 복제하지 않습니다. 또한, Object.assign() 메소드는 상속된 속성을 복제하지 않습니다.
  1. Object.assign() 메소드를 사용할 때 객체 내부의 객체는 어떻게 처리되나요?
  • Object.assign() 메소드는 객체 내부의 객체에 대한 참조를 복사하므로, 내부 객체가 수정되면 대상 객체와 출처 객체 모두에 영향을 미칩니다.