데이터 타입
자바스크립트의 데이터 타입은 크게 두 가지로 나눌 수 있다. 기본형(Primitive)과 참조형(Reference)이다.
데이터 할당 원리
자바스크립트에서는 변수 영역과 데이터 영역을 분리하여 저장한다. 변수 영역에는 변수의 이름과 해당 변수가 가리키는 데이터의 메모리 주소가 저장되고, 데이터 영역에는 실제 데이터가 저장된다. 이를 통해 데이터의 변환을 효율적으로 처리하고 중복된 데이터의 처리 효율을 높일 수 있다.
var a = 'abcd';
변수 영역
| 주소 | 1000 | ... |
| 데이터 | a <- 변수명 @2000 <- 데이터 영역의 주소 |
데이터 영역
| 주소 | 2000 | ... |
| 데이터 | 'abcd' |
불변값과 가변값
변수와 상수를 구분 짓는 변경 가능성의 대상은 변수 영역 메모리이다. 한 번 데이터 할당이 이루어진 변수에 다른 데이터를 재할당할 수 있는지 여부로 구분한다.
불변성 여부를 구분할 때의 변경 가능성의 대상은 데이터 영역 메모리이다.
기본형
var a = 5;
a = 8;
5 자체를 8로 바꾸는 게 아니라 8을 찾아서 a에 할당.
이 때문에 기본형 타입은 불변값이라고 한다.
참조형
var obj = {
a: 5,
};
obj.a = 8;
obj 자체가 변경되는게 아니라 a 프로퍼티만 변경됨.
이 때문에 참조형 타입은 가변값이라고 한다.
변수 복사 비교
기본형
var a = 1; // a의 데이터 주솟값: @1001
var b = a; // b의 데이터 주솟값: @1001
b = 2; // b의 데이터 주솟값: @1002
a와 b는 서로 다른 주소를 바라봄.
참조형
var obj1 = { a: 1 }; // obj1의 데이터 주솟값: @1001
var obj2 = obj1; // obj2의 데이터 주솟값: @1001
obj2.a = 2; // obj2의 데이터 주솟값: @1001
obj1과 obj2는 서로 같은 주소를 바라봄. 프로퍼티 a만 서로 다른 주소를 바라봄.
위 코드에서와 같이 어떤 데이터 타입이든 변수에 할당하기 위해서는 주솟값을 복사해야 하기 때문에 자바스크립트의 모든 데이터 타입은 참조형 데이터이다.
참조형에서 복사 이후 값을 변경할 때 만약 obj2에 '{ b: 2 }'와 같이 새로운 객체를 할당하였다면 obj1과 obj2 두 객체는 서로 다른 주소를 바라본다.
참조형 데이터가 가변값이라고 설명할 때는 참조형 데이터 자체를 변경할 경우가 아니라 그 내부의 프로퍼티를 변경할때만 성립
'JavaScript' 카테고리의 다른 글
| NestJS Custom Decorator로 유저 인증 처리하기 (0) | 2025.02.19 |
|---|---|
| TypeORM의 save() 사용 시 데이터 변경 감지 원리 이해하기 (0) | 2024.12.15 |
| 프로토타입 (0) | 2024.05.22 |
| this / 콜백 함수 / 클로저 (0) | 2024.05.20 |
| 자바스크립트의 실행 컨텍스트 (0) | 2024.05.19 |