원시값이 대체 뭐야?

Debug-Life ·2022년 11월 18일
0

자바스크립트를 배우면서 원시값을 새롭게 배우게 됐다.

Mdn 문서를 살펴보면 원시값이란

JavaScript에서 원시 값(primitive, 또는 원시 자료형)이란 객체가 아니면서 메서드도 가지지 않는 데이터입니다.
원시 값에는 7종류, string, number (en-US), bigint (en-US), boolean, undefined, symbol, 그리고 null이 존재합니다.
그리고,
모든 원시 값은 불변하여 변형할 수 없습니다. 원시 값 자체와, 원시값을 할당한 변수를 혼동하지 않는 것이 중요합니다. 변수는 새로운 값을 다시 할당할 수 있지만, 이미 생성한 원시 값은 객체, 배열, 함수와는 달리 변형할 수 없습니다.

라고 나와있다.
명확하게 이해가 되지 않았다.
그래서 여러 블로그와 유튜브를 찾아봤다.

결국 원시타입이란 객체타입이 아닌것들이다.

내가 알고 있는 객체는 이렇다.
많이들 알고 있는 붕어빵과 붕어빵틀이다.
붕어빵틀이 원본이면 그 붕어빵틀에서 찍어낸게 하나하나의 객체이다.
그 객체들은 서로 독립적인 것이고.

자바스크립트에서 원시데이터 타입을 마치 객체처럼 사용하려고 할떄
자동으로 만들어지는 객체를 래퍼객체 (warpper object)라고 한다.

원시값은 값 전체가 복사가 되는것이고, 객체타입은 해당값을 가리키는 주소값을 복사한다.

자바스크립트에서 변수가 이동을 할때는 항상 값이 복사가 된다.
복사가 되는값이 '값 전체'인지, 아니면 '주소값'인지만 다를뿐이다.
예시를 보자.

// Primivive Types
let a =1;
let b = a;		// copy value of a

// References
let a = {x:1};	// a has "address" of {x:1};
let b = a;		// copy value of a 

이게 레퍼런스 타입이고, c++에서의 포인터이다. 주소값을 복사하는것.
이름만 다르게 부를뿐 똑같다.

그렇다면 객체타입은 왜 값 전체가 아닌, 주소값을 복사하는것일까?
답은 성능때문이다. 객체는 크기가 한도끝도 없이 커질수가 있다. 그래서 큰 객체를 그대로 복사하려면 시간과 비용이 너무 크게 발생한다.

결론

다시 한 번 이해하기 쉽게 정리를 하면
자바스크립트는 기본타입과 참조타입으로 나뉠 수 있으며,
기본타입을 원시 데이터라고 하며 이 자바스크립트값은 더 이상 단순화할 수 없기 때문에 원시적(primitive)이라 하며, 이러한 값을 가리켜 원시값이라 합니다. 
반대로 참조타입은 기본타입을 제외한 모든값이고 같은말로 객체이다.

Primitive Value : 객체가 아닌 모든 값
Primitive Type : 객체가 아닌 값을 가질 수 있는 자료형
※ 자바스크립트에서는 객체, 함수, 배열 모두 객체이다

글의 구성.
1. 원시값에 대한 정의
2. 내가 이해한 과정
3. 원시값과 객체값의 예시
4. 객체에 대한 짧은 설명
5. 객체값과 원시값의 공통점과 차이점.
6. 결론 (원시값을 다시 반복 수미상관 + 강조)

profile
인생도 디버깅이 될까요? 그럼요 제가 하고 있는걸요

0개의 댓글