[javascript] 변수의 값 복사 방법

이 글에서는 JavaScript에서 변수의 값을 복사하는 다양한 방법에 대해 알아보겠습니다. JavaScript에서는 변수를 다른 변수로 복사할 때 참조(reference)를 복사하는 것과 값(value)를 복사하는 것에 주의해야 합니다.

1. 값 복사

원시 데이터 타입(Primitive data type)인 숫자(Number), 문자열(String), 불리언(Boolean), undefined, null은 변수가 가리키는 값 자체가 저장됩니다. 따라서 이러한 값을 다른 변수로 복사하면 값 자체가 복사됩니다.

let x = 10;
let y = x;  // 값 복사
x = 20;
console.log(x);  // 20
console.log(y);  // 10

위의 예제에서 변수 x의 값이 변수 y로 복사되었기 때문에 x의 값이 바뀌어도 y의 값은 변하지 않습니다.

2. 참조 복사

객체(Object), 배열(Array), 함수(Function)와 같은 참조 데이터 타입(Reference data type)은 변수가 가리키는 값의 주소가 저장됩니다. 따라서 이러한 값을 다른 변수로 복사하면 값이 아닌 참조가 복사됩니다.

let obj1 = { name: 'John' };
let obj2 = obj1;  // 참조 복사
obj1.name = 'Jane';
console.log(obj1.name);  // Jane
console.log(obj2.name);  // Jane

위의 예제에서 변수 obj1의 값(객체의 주소)이 변수 obj2에 복사되었기 때문에 obj1 혹은 obj2의 속성을 변경하면 같은 객체를 가리키고 있기 때문에 서로에게 영향을 줍니다.

3. 값 복사를 위한 방법

Spread 연산자Object.assign() 메서드를 사용하여 참조 데이터 타입의 값을 복사할 수 있습니다.

let original = { name: 'Alice' };
let copied = { ...original };  // Spread 연산자를 이용한 값 복사
original.name = 'Bob';
console.log(original.name);  // Bob
console.log(copied.name);  // Alice
let obj = { name: 'Alice', age: 30 };
let copy = Object.assign({}, obj);  // Object.assign() 메서드를 이용한 값 복사
obj.name = 'Bob';
console.log(obj.name);  // Bob
console.log(copy.name);  // Alice

결론

JavaScript에서 변수의 값을 복사할 때에는 변수의 데이터 타입에 따라 값 복사와 참조 복사에 주의해야 합니다. 원시 데이터 타입은 값이 복사되고, 참조 데이터 타입은 참조가 복사됩니다. 원시 데이터 타입을 복사하는 경우에는 단순히 ‘=’ 연산자를 이용하여 값을 복사하면 되지만, 참조 데이터 타입을 복사하는 경우에는 Spread 연산자나 Object.assign() 메서드를 이용하여 값을 복사해야 합니다.