Javascript는 동적 타입 언어로, 변수의 타입은 프로그램이 실행되는 동안 결정되고 변경될 수 있다. 이 언어에서의 자료형으로는 기본적으로 원시 타입과 객체 타입의 두 가지 데이터 타입이 제공된다. 이들 각각의 특징과 차이점을 이해하는 것은 매우 중요하다. 본 블로그에서는 원시 타입과 객체 타입의 차이에 대해서 알아볼 것이다.
원시 타입(Primitive Types)은 기본적인 데이터 타입으로, 변경 불가능한 값(immutable values)을 의미한다. 자바스크립트에서 원시 타입에는 여섯 가지가 있다.
원시 타입을 제외한 모든 자료형이 객체타입(Object Types)이다. 객체 타입은 원시 타입과 달리 복잡한 데이터 구조를 표현할 수 있다. 객체는 프로퍼티(속성)의 집합으로, 각 프로퍼티는 키와 값으로 구성된다. 자바스크립트에서는 함수도 객체의 한 형태로 간주한다. 예시를 들어보겠다.
저장 방식
원시 타입은 값 자체가 변수에 직접 저장되지만, 객체 타입은 메모리에 객체가 저장되고 변수는 그 메모리 주소를 참조한다.
불변성
원시 타입의 값은 불변하지만, 객체 타입의 값은 가변적이다. 객체의 프로퍼티는 변경될 수 있다.
메모리 관리
객체는 크기가 가변적이며, 동적으로 관리된다. 원시 타입은 상대적으로 메모리 관리가 단순하다.
// 원시 타입
let num1 = 100;
let num2 = num1;
num2 = 200;
console.log(num1); // 100. 원본 값이 변경되지 않음
console.log(num2); // 200
// 객체 타입
let obj1 = { value: 100 };
let obj2 = obj1;
obj2.value = 200;
console.log(obj1.value, obj2.value); // 200, 200. 참조된 객체자체가 변경됨. (같은 메모리 주소를 공유)