티스토리 뷰

JavaScript

[JavaScript] 깊은복사와 얕은복사

착한옹이 2020. 6. 4. 10:44

자바스크립트에서는 해당 데이터를 완전히 복사하는 깊은복사와 데이터의 위치를 참조하는 얕은 복사가 있습니다.

 

String, Number, Boolean 타입의 자료형 값을 복사 할 때와 객체를 복사 할 때 각각 다르게 복사가 됩니다.

 

자료형의 복사

 

자바스크립트에서 자료형의 값을 복사 할 때는 독립적으로 해당 값을 완전히 복사하는 깊은 복사가 일어납니다.

 

예제입니다.

 

var value = 10;
var copyValue = value;

value = 20;

console.log(value); //20
console.log(copyValue); //10

 

각각 독립된 데이터로 다른 값을 출력합니다.

 

 

객체의 복사

객체를 복사 할 때는 해당 객체가 저장된 메모리의 위치값을 참조하게 되는 얕은 복사가 일어납니다.

 

예제입니다.

 

var array = [1, 2, 3, 4, 5];
var copyArray = array;

array[0] = 10;

console.log(array); //[10, 2, 3, 4, 5]
console.log(copyArray); //[10, 2, 3, 4, 5]

 

배열(배열도 객체)을 array 변수에 저장하고 copyArray에 그 배열을 복사 했습니다.

 

해당 배열의 첫번째 값을 10으로 재할당하고 각 변수를 출력 했을때 같은 값이 출력됩니다.

 

객체는 변수에 할당 했을 때, 객체 자체를 저장하는것이 아니라 메모리 어딘가에 만들어진 그 객체의 위치를 저장합니다.

 

이를 객체의 참조 또는 얕은 복사라고 표현 합니다.

 

객체를 깊은 복사 할 수 있는 다양한 방법도 있습니다.

 

함수를 활용한 객체의 복사 방법을 알아보겠습니다.

 

function clone(obj){
	var clone = {};
    for(var i in obj){
    	clone[i] = obj[i];
    }
    
    return clone;
}

var original = {a: 1, b: 2};
var copy = clone(original);

original.a = 10;

console.log(original) //{a: 10, b: 2}
console.log(copy) //{a: 1, b: 2}

 

각각의 변수를 출력 시 다른 값이 출력 됩니다.

 

for in문을 사용하여 객체의 값을 return 받아 다른 변수에 저장하여 그대로 복사하여 독립적인 객체를 만들 수 있습니다.

'JavaScript' 카테고리의 다른 글

[JavaScript] 실행 컨텍스트  (0) 2020.07.04
[JavaScript]this  (0) 2020.06.12
[JavaScript] 논리 연산자  (0) 2020.05.27
[JavaScript] 객체  (0) 2020.05.21
[JavaScript]undefined와 null  (0) 2018.03.26
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함