원시 자료형
number, boolean, null, undefined, string, symbol
이 여섯 유형을 원시 타입 데이터라고 부른다.
변수 a 를 선언했을 때, stack이라는 사물함에 a라는 이름이 붙고, 거기에 할당한 값이 저장된다.
a의 값을 찾을 때 사물함 a를 열어 그 안에 들어있는 1이라는 값을 꺼내서 가져온다.
특징으로는 데이터가 '하나'의 정보를 담고 있다는 것!
POINT**
원시 타입 데이터는 데이터를 복사해도 기존의 데이터에 영향을 미치지 않는다!
let a = 1;
let b = 2;
b = 2;
console.log(a) = 1;
즉 이미 a라는 이름을 가진 사물함 내부에는 1이라는 숫자가 할당이 되어 저장되어 있기때문에
a에 b를 할당하고, b에 2를 할당한다고 해서 a의 값이 2로 변경이 되지 않는다는 것이다.
참조자료형
array, object, function
이 세가지 유형을 참조 타입 데이터라고 부른다.
heap이라는 빈 공간을 만들어 변수 a 라는 이름을 가진 사물함에 주소를 저장한다.
a의 값을 찾을 때 heap에 저장되어 있는 주소에서 가져오게 되는데
그 말인 즉 원소를 빼거나 넣어도 그 주소지 내부에서 변화가 생기고, 찾아온다는 것이다.
POINT**
참조 자료형 데이터는 주소를 복사한 것이기에 데이터를 변경하게 되면 주소 안의 데이터가 변경이 되어
기존의 데이터에 영향을 준다.
let e = [10,20];
let f = e;
f[0] = 50;
console.log(e) = [50,20];
즉 e라는 이름을 가진 사물함 내부에 주소 값이 들어갔기에 데이터 값 그 자체가 유지되는 것이 아니다.
그렇기에 데이터를 변경하게 되면 그 주소 내부에 저장되어 있는 데이터 자체가 변하게 되는 것이고,
다시 불러왔을 때, 변경된 주소 내부에 저장되어 있는 데이터를 가져오게 되어 변경된 값이 나오게 되는 것이다.
원시 자료형, 참조 자료형 응용
//문제 1 //
let arr = [2,3,4,5];
let newArr = arr;
newArr[2] = 25;
newArr = undefined;
arr의 값은?
//문제 2 //
let x = { sleep: alive }
let y = x;
y= 2;
x.sleep의 값은??
먼저 문제 1의 값은 [2,3,25,5]이다. newArr에 arr를 할당해주었을 때,
주소값이 저장이 되므로 newArr[2]에 25를 할당하면
[2, 3, 25, 5]로 데이터가 변경이 된다.
하지만 마지막에 newArr에 undefined 데이터를 저장해 줌으로 인해
arr 주소에 접근을 할 수 없게 된다.
그리하여 arr가 undefined가 되는 것이 아니라, 기존에 변경된 데이터 [2, 3, 25, 5]가 되는 것이다.
원시 자료형을 덮어 씌우면 그 저장되는 데이터 자체가 우선이 되는 것으로 보인다.
문제 2를 살펴봐도 알 수 있다.
y에 2라는 데이터가 저장이 되어버려 x라는 주소에 접근할 수 없게 됐고, 따로 x의 데이터 값이 변경이 되지 않고
alive가 나오게 된다.
'개발 R.I.P.' 카테고리의 다른 글
5.31 Dev.Feedback(Spread 문법, Rest 문법) (0) | 2021.05.31 |
---|---|
5.29 Dev.Feedback(Deep Copy, Shallow Copy) (0) | 2021.05.29 |
5/27 Dev.Feedback(CSS) (0) | 2021.05.27 |
5.26 Dev.Feedback(객체) (0) | 2021.05.26 |
5.25 Dev.Feedback(배열) (0) | 2021.05.25 |