깊은복사 얕은복사

코드깎는 노인·2019년 12월 10일
0

javascript

목록 보기
3/8

자바스크립트는 기본 자료형(숫자, 문자열, boolean)의 값을 복사할 때 값을 완전히 복사한다.

따라서 =을 이용하여 값 복사를 쉽게 할 수 있다.

아래는 깊은 복사 예제이다.

var originValue =100 ;
var newValue = originalValue;
 
originValue = 200;
 
console.log(originValue);
console.log(newValue);

1열에서 originalValue에 100의 값이 들어가고, 2열에서 newValue에 100이라는 값이 복사되어,

두 개의 변수 Original value, New value는 완전히 독립적인 상태가 된다.
이 상태에서 4열에 따라 originalValue의 값을 200으로 변경하면, originalValue 값만 200이 된다.

이렇게 두 변수가 완전히 독립성을 갖는 것을 '값 복사' 또는 '깊은 복사' 라고 한다.

값을 복사하고 변경했을 때, 다른 값에 전혀 영향을 주지 않는다.

6,7열에 따라 각각 200, 100이 출력된다.


객체에 변수를 저장하면, 실제의 값을 저장하는 것이 아니닌 객체를 메모리 어딘가에 만들고, 객체의 참조(위치 값)를 저장하게 된다.

따라서 객체(배열 포함)의 경우 = 를 이용하여 복사하면, 참조 복사만 가능하다.

아래의 소스코드를 보자

var originArray = [1, 2, 3, 4];
var newArray = originalArray;
 
originArray[0] = 200;
 
alert(originalArray);
alert(newArray);

1열에서 배열 originArray에 [1,2,3,4]를 저장하는 과정은 다음과 같다.

주소값1에 [1,2,3,4]를 저장하고, 객체 originArray는 주소값1 위치를 참조.
이때 2열에 따라 참조되는 주소값1 이 복사된다.
4열에서 originArray[0] = 200; 을 실행하면, 참조되는 위치 주고값1이 변경된다.

originArray와 newArray는 같은 메모리 위치를 참조하게 된다.

따라서 두 배열은 독립적이지 않다. 이런 것을 '참조 복사' 혹은 '얕은 복사'라고 한다.

6,7열에 따라 newArray[0]을 출력하면 둘다 200을 출력하게 된다.

profile
내가 볼려고 만든 블로그

0개의 댓글