자바스크립트 내에는 타입으로 나누면 두 개의 타입이 존재하는데 그 타입으로는
- 원시 타입 (Primitive Type || Value Type)
- String
- Number
- Boolean
- Null
- Undefined
- Symbol (ES6 추가)
- 참조 타입 (Reference Type)
- Object
- Array
- Function
- Class
- 원시형 타입에 명시되지 않은 데이터
원시 타입 (Primitive Type)
- 불변성: 모든 원시 타입은 리터럴(literal) 형식이 존재 (리터럴은 데이터 그 자체를 의미)
- 변수의 값을 변경할 때 메모리 상 값이 변경되는게 아닌 새로운 메모리에 재할당한 값이 새로 생성
let homeTown = "서울";
console.log(homeTown); // 서울
let myHomeTown = homeTown;
console.log(homeTown); // 서울
homeTown = "인천";
console.log(homeTown); // 인천
// homeTown 변수의 값이 변경되어도 myHomeTow의 변수는 homeTown의 값을 통째로 복사하여 메모리에 담기때문에 영향이 없음
참조 타입 (Reference Type)
- 원시 타입을 제외한 나머지는 참조타입(객체)
- 원시 타입과 가장 큰 차이점은 변수의 크기가 동적으로 변함
- 별도의 메모리 공간 (Heap)에 저장되며, 변수에 할당 시 데이터에 대한 주소가 할당됨
let arr = [];
let copyArr = arr;
copyArr.push(1);
console.log(arr); // [1]
// 이렇듯 메모리 주소가 저장이 되어 있는 형태라 원본 데이터도 같이 변경됨
참조타입의 변수를 복사나 수정 시 참조여부를 잘 고려해야 한다.
그렇지 않으면 원본 데이터가 예상치 못하게 변경될 수 있으니 주의해야 한다.
'JAVASCRIPT' 카테고리의 다른 글
[Javascript] 자바스크립트는 컴파일 언어? 인터프리터 언어? (0) | 2024.09.04 |
---|---|
[Javascript] 자바스크립트의 비트 연산자 (Bitwise Operators) (0) | 2024.09.04 |
[Javascript] 자바스크립트의 논리 연산자 (Logical Operators) (0) | 2024.08.30 |
[Javascript] 한글에서 받침(종성) 체크해서 조사(-은,-는...) 구분하기 (0) | 2024.04.11 |
[Javascript] 스프레드 연산자 (Spread Operator) (0) | 2024.03.20 |