카테고리 없음
TIL
egg.silver
2023. 8. 18. 08:53
( 어제 그냥 잠들어버려서 다음날 아침 일찍 쓰는 하루 전 TIL )
JS에서 사용되는 데이터 타입 7가지
- 원시형 타입 : number, string. boolean, undefined, null, Symbol
- 객체형 타입 : 배열, 함수, 데이터 등이 포함
이 둘을 나누는 기준은 데이터 불변성과 값의 저장 방식이다.
1. 데이터 불변성 여부
(1) 기본형 : 불변
-> 이때 주의해서 알아두어야 할 점은 변수에 할당되는 값은 변한다는 개념과 데이터 값이 변한다는 개념을 구분해야 한다.
-> 데이터 값은 변하지 않음을 유의해야 한다.
이때 변수에 할당된 값을 바꾸는 경우
- 데이터 값이 변경되는 것이 아닌, 새로운 데이터가 생겨나고 그 값이 재할당 됨
- 이때 사용하지 않게된 @5004의 'Abc'의 경우 가비지컬렉터의 수거 대상이 됨
변수에 직접 데이터를 할당하지 않는 이유?
1. 데이터 변경을 쉽게 하기 위해서
-> 만약 string데이터값을 더 길게 변경할 경우, 더 차지하게 되는 자리만큼 모든 데이터를 옆으로 밀어주어야 함
2. 메모리의 효율적인 사용을 위해서
-> 변수 1만개를 각각 생성하여 1를 할당하는 경우, 변수에 데이터를 그대로 넣는 경우, 8만byte의 메모리 필요
단, 데이터와 변수를 따로 저장하는 경우, 데이터 1의 8byte와 변수(2byte로 가정) 1만개를 저장할 메모리 2만 byte만 필요
(2) 참조형 : 가변
-> 객체의 변수 영역이 별도로 존재하게 된다.
var a = 10;
var b = a;
var obj1 = {c:10, d: "ddd"}
var obj2 = obj1
// 상호 복사
b = 15;
obj2.c = 20;
// 값 변경
-> 나는 obj2의 값만 바꾸려고 했지만 obj1의 값도 함께 바뀌게 되는 것이다.
-> 위와 같은 이슈를 막기 위해서는 객체의 프로퍼티에 접근하여 값을 바꾸는 것이 아니라, 복사란 객체 자체를 변경하면 해당 이슈를 막을 수 있음