* 원시(Primitive)타입과 객체(Object)타입의 비교
> 원시타입은 메모리 셀 안에 값이 바로 들어가있으며 변수가 그 메모리 자체를 가르키고 있다.
> 객체타입은 메모리의 주소(참조값)를 가르키고있다.
* 원시타입의 값 복사
> Copy by value(Call by value와 동일한 개념) // (값에 의한 호출)
> 값 자체가 복사되어진다.
ex) let a = 1 // a = b // b; 1 => b에 다른 값을 할당할 경우 b의 값만 단독으로 변한다.
* 객체타입의 값 복사
> Copy by Reference(Call by reference와 동일한 개념) // (참조에 의한 호출)
> 값을 복사할경우 해당 객체가 참조하고 있는 참조값(메모리 주소, 레퍼런스)가 복사된다.
> 따라서 값을 변경하면 둘다 값이 변경이 된다.
> Spread Operator혹은 Object.assign()을 이용하여서 값을 복사 하여야 한다.
[ 주의사항 ]
: 해당 복사도 1depth의 범위까지 복사가 되니 유의해야한다.
: 객체안의 객체까지는 복사안된다. 복사를 하려면 객체안의 객체도 Spread Operator혹은 Object.assign()을 이용하여서 값을 복사 해야한다.
// 원시타입은 값이 복사되어 전달됨
// 따라서 a의 값의 변화가 b의 값의 변화에 영향을 미치지 않는다.
let a = 1;
let b = a; //1
b = 2;
console.log(a);
console.log(b);
// 객체타입은 참조값(메모리주소, 레퍼런스)가 복사되어 전달됨
// 서로 같은 참조를 가르키고 있으므로 서로의 값의 변화에 영향을 미친다.
let apple = {
// 0x1234
name: '사과',
};
let orange = apple; // 0x1234
orange.name = '오렌지';
console.log(apple);
console.log(orange);
'Study > JavaScript' 카테고리의 다른 글
[JavaScript_study] 연산자에 대해서 (0) | 2022.04.10 |
---|---|
[JavaScript_study] 값으로 평가될 수 있는 것들 (0) | 2022.04.10 |
[JavaScript_study] 객체 타입(object) (0) | 2022.04.10 |
[JavaScript_study] null과 undefined 타입 (0) | 2022.04.10 |
[JavaScript_study] 숫자, 문자, 불리언 타입 (데이터 타입) (0) | 2022.04.10 |