자료형(Type)이란 어떤 프로그래밍 언어에서든 기초가 되는 부분입니다.
프로그래밍 언어에서는 변수에 할당된 값의 유형에 따라 자료형을 구분 짓게 됩니다.
자바스크립트에서는 자료형을 원시 타입(Primitive Data Type)과 참조 타입(Reference Data Type)이라는 두 가지 타입으로 구분합니다.
원시 타입은 변수에 값이 할당될 때 메모리 상에 고정된 크기로 저장되고 해당 변수가 원시 데이터 값을 직업 보관합니다.
자바스크립트의 원시 타입 자료형은 다음 표와 같습니다.
자료형(Type) | 특성 |
숫자형(Number) | 숫자를 표현하는 자료형, 자바스크립트에서는 정수, 실수 상관없이 모두 Number로 포괄한다. |
문자열(String) |
글자, 기호, 숫자를 포함한 문자들의 집합. |
부울린(Boolean) |
참(true) 또는 거짓(false)을 표현함. null. 0, -0, NaN, undefined, 빈 문자열("")이 할당되면 초기값은 false. |
기호(Symbol) |
ES2015부터 새롭게 추가된 원시 자료형. 원시형 중에 유일하게 변경 불가능한(immutable) 자료형이며 Symbol() Wrapper 함수를 호출하여 생성, 항상 고유한 값을 반환함. 객체 속성을 구분하기 위한 키로 사용하는 것이 유일한 목적 |
null과 undefined |
null은 빈 값을 의미하며, undefined는 존재하지 않는 값을 의미 |
원시 타입 변수의 복사는 다음과 같이 이루어집니다.
let a = 3; // 원시 타입 변수인 a를 선언하고 3이라는 값을 할당
let b = a; // 새로운 변수인 b를 선언하여 a의 값을 복사
a = 10; // a의 값을 10으로 변경
console.log(b); // 원시 타입 자료형의 특성에 따라 b는 a의 메모리 주소가 아닌 할당값만 복사했으므로 그대로 3 출력
직접 결과를 출력해보면 b의 값은 3이 그대로 남아서 출력되는 것을 볼 수 있습니다.
a가 참조 타입으로 취급되어서 b가 a의 주소를 참조했더라면 a의 값이 10으로 바뀌면서 b 또한 10으로 출력되었을 것입니다.
하지만 a 변수에는 3이라는 정수가 직접적으로 대입되면서 원시 타입으로 판정되었고, 그에 따라 b는 a에 들어있는 값만을 직접 할당받게 된 것입니다.
참조 타입
참조 타입은 원시 타입과 반대로 크기가 정해져 있지 않고 변수에 할당될 때 값이 변수에 직접 저장되지 않으며, 변수는 값의 메모리 주소만 참조하게 됩니다.
참조 타입인 객체는 키(key) : 값(value)으로 이루어진 속성들(Properties)의 집합을 의미하며, 내부에는 순서, 크기가 따로 정해져 있지 않습니다.
키는 문자열(String) 자료형이며, 키를 통해 속성의 값에 접근할 수 있습니다.
참조 타입 변수의 복사는 다음과 같이 이루어집니다.
let a = [3, 4]; // a에 3과 4라는 값이 담긴 Array 객체를 할당함으로써 참조 타입의 변수가 만들어짐
let b = a; // 새로운 변수 b를 선언하고 참조 타입인 a 변수를 참조한다.
a[0] = 5; // Array 객체인 a의 0번 인덱스에 들어있는 값을 5로 변경
console.log(b); // b의 값을 출력, a를 참조하고 있던 b는 a의 값인 '[5, 4]'를 출력된다.
a에 배열(Array) 객체를 할당하여 참조 타입 변수로 만들어준 후, b로 a를 참조시킨 결과, a 내부의 값을 변경하면 a를 참조한 b 변수 또한 a에서 변경된 값을 가지게 되었습니다.
고정되지 않은 값은 직접 변수에 저장될 수 없으나, 변수에 참조시킬 수는 있습니다.
그렇기 때문에 참조 타입의 변수는 객체의 메모리 주소를 변수에 할당하여 객체 내부의 값을 조회, 조작할 수 있게 됩니다.
'웹프로그래밍 > javascript' 카테고리의 다른 글
자바스크립트(javascript) 템플릿 문자열(template strings) 알아보기 (0) | 2020.01.25 |
---|---|
자바스크립트(javascript) null과 undefined의 차이 (0) | 2020.01.25 |
자바스크립트(javascript) 문자열 다루기 (0) | 2020.01.21 |
자바스크립트(javascript) Number 자료형과 Infinity, NaN (0) | 2020.01.21 |
자바스크립트를 실행하기 위한 Node.js REPL 환경이란? (0) | 2020.01.19 |