1.원시값(primitive type)
- 원시값은 단순한 데이터이다. 변수가 가리키는 메모리에 실제로 값이 들어있다.
- 변경 불가능한 값(Immutable value) -> 원시값 자체를 변경할 수 없는 것이지, 변수를 변경(재할당)하는것은 가능하다.
- 원시값은 데이터의 신뢰성을 보장한다.
- 변수에 값을 재할당시 메모리에 저장된 값을 지우고 다시 할당하는것이 아니라 다른 메모리 주소에 값을 저장한다.
- 원시값에는 Number, Bigint, String, Boolean, Symbol, undefined, null 7가지가 있다.
- 값에 의한 전달(pass by value) : 원시값은 실제 값이 복사되어 전달된다. 이를 값에 의한 전달 이라고 한다.
var height = 80;
var copy = score;
console.log(height, copy); // 80 80
console.log(height === copy); // true
위의 코드에서 height와 copy는 동일한 값을 가지고있지만, 별개의 메모리 공간에 저장되어 있다. 어느 한쪽을 재할당 하더라도 다른 한쪽의 값에 영향을 주지 않는다.
2. 참조값(Reference type)
- 참조값은 여러 값으로 구성되는 메모리에 저장되는 객체이다.
- 참조값은 크기가 정해져있지 않고, 변수의 값이 저장된 메모리블록의 주소가 저장된다.
- 참조값은 변경 가능한 값(mutable value) 이다.
- 참조값을 할당한 변수는 재할당 없이 참조값을 직접 변경할 수 있다.
- 참조값에는 Object(Object, function, array etc)가 있다.
- 참조에 의한 전달(pass by reference) : 참조값이 가리키는 변수를 다른 변수에 할당하면 원본의 참조값이 복사되어 전달된다.
이 때 복사된 사본과 원본이 같은 참조값을 가리킨다. 따라서 둘 중 한곳에서 값을 변경하면 다른쪽에도 영향을 준다.
let origin = {
key : 'value'
}
let copy = origin;
console.log(origin === copy); // true
copy.key = 'new'; // 재할당
console.log(origin === copy); // true
* 얕은복사(shallow copy)와 깊은복사(deep copy)
- 얕은 복사와 깊은 복사로 생성된 객체는 원본과는 다른 객체다.
- 얕은복사는 객체에 중첩되어 있는 객체의 경우 참조값을 복사한다.
- 깊은복사는 객체에 중첩되어 있는 객체까지 모두 복사해서 원시값처럼 완전한 복사본을 만든다.
3. 원시값과 참조값의 비교
- 원시값은 변경 불가능한 값(immutable value)이고, 참조값은 변경 가능한 값(mutable)이다.
- 원시값을 변수에 할당하면 실제 값이 저장된다. 참조값을 변수에 할당하면 값이 있는메모리를 가리키는 참조값이 저장된다.
- 원시값을 복사하면 값에 의한 전달(pass by value)이 되고, 참조값을 복사하면 참조에 의한 전달(pass by reference)이 된다.
Reference
- https://choar816.tistory.com/154
'코드스테이츠' 카테고리의 다른 글
12/21 정리 HTML/ 동기부여세션 (0) | 2022.12.21 |
---|---|
12/20 정리 페어와 문제풀이 (0) | 2022.12.20 |
12/19 정리(2) 함수 (0) | 2022.12.19 |
12/19 정리(1) 조건문/반복문 (0) | 2022.12.19 |
호이스팅(Hoisting) (0) | 2022.12.18 |
댓글