자바스크립트에서 원시 타입의 데이터(primitive data types; 원시 자료형)는 객체가 아니면서 method를 가지지 않는 6 가지의 타입
string, number,bigint, boolean, undefined, symbol, (null)
을 말합니다.
이 중에서 자주 사용하는 4 (+1)가지 원시 자료형
string, number, boolean, undefined, (null)
을 살펴보겠습니다.
이 데이터를 유심히 볼까요? 모두 어떤 종류의 데이터인가요?
왜 원시 자료형이라고 부르나요?
'string', 42, true, false, undefined // 데이터가 "하나"의 정보를 담고 있습니다.
원시 자료형은 모두 "하나"의 정보, 즉, 데이터를 담고 있습니다. 옛날에 어떻게 코드를 작성했는지를 돌아보면, 왜 이런 단순한 데이터가 "원시적인" 데이터라고 이야기 하는지 조금은 더 쉽게 이해하실 수 있습니다. 그 때는 데이터 저장소(메모리)의 용량이 제한되어 변수 하나에 데이터 용량이 제한된 하나의 원시 자료형 밖에 담을 수 밖에 없었기 때문입니다.
옛날 컴퓨터에서 사용되던 BASIC이라는 컴퓨터 언어인데, 우리가 알고 있는 string과 number는 쉽게 찾을 수 있지만, 배열에 상응하는 녀석은 찾기 어렵죠. 이 때는 배열이 구현 가능했더라도 보통 사이즈가 제한되어 있었습니다. 우리가 배우는 원시 자료형과 같네요.
데이터 보관함 한 칸에 하나의 데이터만 넣을 수 있는 그 때의 "원시적인" 방식이죠. 반면, 참조 타입은 어떤가요?
const colors = ['Blue', 'Green', 'Red', 'Pink']; // 사용될 수 있는 색의 종류를 담고 있습니다.
const archer = {
name: 'tyrande',
race: 'night elf',
str: 29,
dex: 49, // ...
} // 특정 게임의 궁수(archer)의 정보를 담고 있습니다.
- 참조 자료형은 딱 봐도 하나의 주제는 있지만 분명 서로 다르고, 여러 개의 데이터를 가지고 있는 것을 확인하실 수 있습니다.
원시 자료형의 보관함인 변수에는 하나의 원시 자료형만 담을 수 있습니다. 이 특징은 참조 자료형이 보관되는 특별한 보관함과는 구분됩니다. 우리가 배웠던 참조 자료형(배열, 객체...)는 어떻게 코드를 작성하느냐에 따라 보관되는 데이터의 양이 천 개, 만 개가 될 수 있습니다. 반면에, 원시 자료형은 "하나"의 의미를 가지는 데이터임에는 변함이 없습니다. 그렇기 때문에 원시 자료형이 담기는 보관함의 크기는 고정하는 것이 합당합니다. 어느정도 일정한 크기의 데이터가 온다고 예상할 수 있기 때문입니다. 그래서...
변수에는 하나의 데이터만 담습니다.
const num1 = 123;
const num2 = 123456789;
이렇게 변수에는 데이터의 크기와는 관계 없이 하나의 데이터만 담을 수 있습니다. 원시 자료형은 값 자체에 대한 변경이 불가능(immutable)하지만, 변수에 다른 데이터를 할당할 수는 있습니다.
//"hello world!" "hello codestates!" // "hello world!" 와 "hello codestates!"는 모두 변경할 수 없는 고정된 값입니다.
let word = "hello world!"
word = "hello codestates!" // 하지만, word라는 변수에 재할당을 하여 변수에 담긴 내용을 변경은 가능합니다.
const num1 = 123;
num1 = 123456789; // 에러 발생 // const 키워드로 선언하면, 재할당은 불가합니다.
그런데 변수에는 하나의 데이터만 담습니다.라는 표현은 우리가 지금까지 배운 내용과 다른 점이 있습니다.
배열과 객체를 담았을 때는, 여러 데이터가 들어갔다가 나갔다가 하지 않나요? 하나만 못 담는데..
참조 자료형을 변수에 할당할 때는 변수에 값이 아닌 주소를 저장합니다. 그리고 이 주소 자체와, 주소가 할당되는 과정을 우리가 눈으로 확인할 수 없기 때문에 이해하기 어렵습니다. 하지만 꼭 이해하고 넘어갑시다. 참조 자료형에 대해서는 다음 레슨에서 보다 자세하게 이야기 해봅시다.
Self-Guided Lesson (optional)
- 아래 내용은 이해하지 못해도, 향후 개발하는데 큰 문제는 없습니다. 다만, 아래 단어들 때문에 개념 이해에 햇갈리는 부분이 있다면 참고하시기 바랍니다.
'JS' 카테고리의 다른 글
메서드와 this (0) | 2021.10.01 |
---|---|
객체 복사, 병합과 Object.assign (0) | 2021.10.01 |
구조 분해 (Destructing) (0) | 2021.09.22 |
Spread/Rest 문법 (0) | 2021.09.22 |
참조 자료형 (0) | 2021.09.22 |