자바스크립트

[JavaScript] 타입

코딩하는둥이 2025. 3. 5. 14:19

타입(자료형)는 데이터의 종류라고 할 수 있습니다.

js는 동적 타입이라 한 변수에 여러 타입의 데이터를 재할당 할 수 있는데요,

먼저 원시 타입과 참조타입을 알아보겠습니다.

 

 

 원시타입 primitive type

 - 가장 기초적인 타입을 가진 값입니다

    변수에 값 자체가 저장이 되고 불면하며 변경 시 새로운 값을 생성합니다. 

    스택 메모리에 저장이 됩니다.

    변수 간의 복사는 값 자체를 복사하며 독립적입니다.

    원본은 하나 뿐입니다.

 

종류

string: 문자열
number: 숫자
boolean: 논리값 (true, false)
undefined: 선언되었으나 값이 할당되지 않은 상태 즉, 메모리 할당만 받은 변수입니다.null: 의도적으로 "값이 없음"을 나타냄

null: 객체가 없음을 의미하는 값
symbol: 고유하고 변경 불가능한 값 (ES6 도입)
bigint: 아주 큰 정수를 나타냄 (ES11 도입)

 

 

참조타입 Reference type

 변수, 함수 등의 이름을 기반으로 참조 가능한 메모리의 값에 저장합니다.

 참조 타입의 데이터는 힙 메모리에 저장됩니다.

 같은 원본이 여러 곳에 사용될 수 있습니다.

 

종류

object: 객체, 배열, 함수 등

 

얉은 복사 shallow copy

 - 객체의 참조만 복사합니다.

   만약에 얕은 복사를 여러번을 하면 하나의 원본을 가르키는 변수가 여러개가 되고 서로 값의 변경에 영향을 끼치는 문제점이 있습니다.

const originalObj = { a: 1, b: { c: 2 } };
const shallowCopy = { ...originalObj }; // 얕은 복사

shallowCopy.a = 3; // 원본에는 영향 없음
shallowCopy.b.c = 4; // 원본에 영향 있음

console.log(originalObj); // 출력: { a: 1, b: { c: 4 } }
console.log(shallowCopy);  // 출력: { a: 3, b: { c: 4 } }

 

 

깊은 복사 Deep copy

 - 실제 값을 복사합니다

   각 변수의 값 변경에 서로를 영향받지 않아 독립적으로 사용됩니다.

 

const originalObj = { a: 1, b: { c: 2 } };
const deepCopy = JSON.parse(JSON.stringify(originalObj)); // 깊은 복사

deepCopy.a = 3; // 원본에는 영향 없음
deepCopy.b.c = 4; // 원본에 영향 없음

console.log(originalObj); // 출력: { a: 1, b: { c: 2 } }
console.log(deepCopy);     // 출력: { a: 3, b: { c: 4 } }