원시형 데이터 타입과 참조형 데이터 타입의 이해
자바스크립트는 다른 언어와 달리 내장 자료형이 많지 않습니다.
간결한 만큼 개념도 복잡하지 않고 이해하기도 쉽습니다.
자바스크립트의 데이터 타입은 크게 원시형 데이터 타입과 참조형 데이터 타입으로 나눕니다.
원시형은 숫자형(Number), 불리언형(Boolean), 문자형(String), 심볼형(Symbol), null, undefined 이렇게 6개가 있습니다.
원시형을 제외한 나머지 모든 자료형은 글로벌 객체에서 파생되기 때문에 참조형 타입은 모두 객체입니다.
원시형 데이터 타입
원시형은 다음과 같은 특징을 가집니다.
자료형 |
설명 |
숫자형 |
정수, 실수, 지수표현 등 모든 숫자 형태의 데이터를 표현하는 자료형입니다. 다른 언어와 달리 상세 구분은 없으며, 자동으로 캐스팅 됩니다. 정수형과 실수형의 형 변환은 parseInt(), parseFloat() 과 같은 변환 함수를 사용해 변환 후 연산을 할 수 있습니다. |
문자형 |
문자, 숫자, 기호, 특수문자의 모음을 작은 따옴표, 큰 따옴표로 감싸서 표현하는 자료형입니다. |
불리언형 |
참/거짓 두가지 값만을 가지는 자료형입니다. |
심볼형 |
ES6에서 새로 추가된 자료형입니다. |
null |
빈 값을 의미합니다. 변수는 초기화 되었지만, 값이 저장되지 않은 상태입니다. |
undefined |
변수 자체가 존재하지 않는 것을 말합니다. |
var x = 1;var y = '문자열';let bool = true;let none = null;var noinit;let sym = Symbol('심볼');
심볼
심볼은 많이 사용하지 않기 때문에 앞으로도 크게 사용할 일은 없지만, 기초 개념을 별도로 알아둘 필요가 있습니다.
심볼은 문자열 인자를 받아 고유한 키값을 생성합니다. 같은 인자를 넘겨도 다른 키값이 생성되기 때문에 실행할 때마다 다른 값이 필요할 때 사용할 수 있습니다.
객체의 속성 키로 사용할 수 있습니다.
let symbol1 = Symbol('key');let symbol2 = Symbol('key');
console.log(typeof(symbol1));console.log(symbol1 == symbol2);
let obj = {};obj[symbol1] = 'value';obj[symbol2] = 'value';
console.log(obj[symbol1] === 'value');console.log(obj[symbol2] === 'value');console.log(obj[symbol1] === obj[symbol2]);
참조형 데이터 타입
참조형 데이터 타입은 객체만 있기 때문에 객체와 같다고 보면 됩니다.
객체는 중괄호({}) 안에 키:값 형태로 하나 이상의 속성을 표현한 것입니다.
객체의 속성 키는 반드시 문자형이어야 하며, 값은 원시형, 또는 객체가 될 수도 있습니다.
객체 속성 값에는 다시 객체가 올 수 있습니다. 즉, 객체는 중첩해 정의할 수 있습니다.
객체의 속성 값에 대한 접근은 객체 속성 키를 통해 합니다.
원시 자료형을 제외한 함수, 배열, 맵, 집합 등 다양한 형태의 객체가 있습니다. 이들은 모두 객체의 한 종류입니다.
let obj = {name: '라이언', value: 5};
var arr = [3, 2, 4, 5, 7];
let myFunc = function(param){ return true; console.log(param + ' run!');}
var objliteral = {item: '포도', getName: function(){ return this.item;}};
!주의할점
원시형 자료형 또한 내부 데이터를 구현할때는 객체로 감싸 객체의 한 종류로 사용합니다.
언어에서 별도의 자료형으로 구분해서 사용하는 것일뿐 내부적으로는 모두 객체의 한 종류로 취급됩니다.
객체는 참조형 데이터 타입입니다.
참조형이라는 것은 객체를 할당한 변수는 실제 데이터가 들어있는 영역을 가리키는 주소만을 가지고 있다는 뜻입니다.
실제 참조형 데이터의 크기나 길이는 다양하기 때문에 실제 구현된 데이터(객체 정보와 객체 데이터)의 위치는 메모리 어딘가에 있고, 참조형 변수는 이 위치를 가리키는 고정된 크기의 주소값만 가지고 있게 됩니다.