Post

JavaScript 자료형

JavaScript 자료형

JavaScript 자료형


JavaScript의 자료형은 크게 기본형(Primitive Type)참조형(Reference Type) 으로 나뉜다.


  • 기본형(Primitive Type): 값 자체를 저장하며, 변경이 불가능(Immutable)함
  • 참조형(Reference Type): 값이 아니라 참조값(주소)을 저장하며, 값 변경이 가능(Mutable)함
  • 기본형은 값 자체를 변수에 저장하지만, 참조형은 메모리 주소(참조값)를 저장
  • 기본형은 연산할 때 새로운 값을 생성하지만, 참조형은 직접 값이 변경됨
  • 기본형은 스택(Stack), 참조형은 힙(Heap)에 저장됨


1. 기본형 (Primitive Type)

자료형설명예제
number숫자형 (정수, 실수)let a = 42; let b = 3.14;
bigint큰 정수형 (ES11+)let c = 1234567890123456789n;
string문자열let d = "JavaScript";
boolean논리형 (true/false)let e = true;
undefined값이 정의되지 않음let f;
null값이 없음을 명시적으로 지정let g = null;
symbol유일한 값 생성 (ES6+)let h = Symbol("id");
  • 불변(Immutable): 값이 변경될 수 없으며, 연산 시 새로운 값이 생성됨
  • typeof 연산자를 사용하면 자료형을 확인할 수 있음
1
2
3
4
5
6
7
console.log(typeof 42);        // "number"
console.log(typeof "hello");   // "string"
console.log(typeof true);      // "boolean"
console.log(typeof undefined); // "undefined"
console.log(typeof null);      // "object" (버그지만 유지됨)
console.log(typeof Symbol());  // "symbol"
console.log(typeof 10n);       // "bigint"


2. 참조형 (Reference Type)

자료형설명예제
object객체 (key-value 저장)let obj = { name: "Alice", age: 25 };
array배열 (리스트 구조)let arr = [1, 2, 3];
function함수도 객체의 한 종류function foo() { return 42; }
date날짜 및 시간 객체let now = new Date();
regexp정규 표현식 객체let regex = /ab+c/;
  • 가변(Mutable): 값 변경 가능하며, 동일한 객체의 상태를 수정할 수 있음
  • = 연산자로 복사하면 같은 객체를 참조
  • Object.assign()이나 structuredClone()을 사용하면 별도의 객체를 생성
1
2
3
4
let a = { name: "Alice" };
let b = a;
b.name = "Bob";
console.log(a.name); // "Bob" → 원본 객체도 변경됨 (같은 참조값 공유)


3. 메모리 저장 방식

구분기본형 (Primitive Type)참조형 (Reference Type)
저장 방식값 자체 저장참조(메모리 주소) 저장
값 변경 여부변경 불가 (새 값 생성)변경 가능 (같은 객체 수정)
연산 가능 여부연산 시 새 값 반환연산 시 기존 객체 변경
메모리 할당스택(Stack)힙(Heap)
  • number, string, boolean 등은 불변 객체로 값 변경 시 새로운 객체 생성
  • object, array, function가변 객체로 값을 변경해도 같은 객체 유지


4. 함수 호출 시 차이

  • 기본형(Primitive Type): 함수 호출 시 값이 복사되어 전달되므로, 원본 변수는 변경되지 않음
  • 참조형(Reference Type): 함수 호출 시 참조값이 전달되므로, 내부에서 값을 변경하면 원본 데이터도 변경됨
1
2
3
4
5
6
7
8
// 참조형 (Reference Type)
function modifyObject(obj) {
    obj.name = "Bob";
}

let person = { name: "Alice" };
modifyObject(person);
console.log(person.name); // "Bob" → 원본 객체가 변경됨
1
2
3
4
5
6
7
8
// 기본형 (Primitive Type)
function modifyNumber(n) {
    n += 1;
}

let x = 10;
modifyNumber(x);
console.log(x); // 10 → 원본 값이 변경되지 않음


5. 문자열(String)의 특이점

  • string불변(immutable) 객체이므로, 값을 변경하면 새로운 객체가 생성됨
  • 문자열 연산 (+, concat())을 하면 새로운 문자열 객체가 만들어짐
1
2
3
4
let str = "hello";
console.log(str);  // "hello"
str += " world";
console.log(str);  // "hello world" (새로운 문자열 객체 생성)
  • 문자열을 자주 변경해야 할 경우, String 대신 Array를 사용하면 성능이 향상될 수 있음
1
2
3
let strArr = ["hello"];
strArr.push(" world");
console.log(strArr.join("")); // "hello world"


6. 요약

구분기본형 (Primitive Type)참조형 (Reference Type)
저장 방식값 자체 저장참조값(주소) 저장
값 변경불가능 (새 값 생성)가능 (기존 객체 변경)
연산 방식연산 시 새 값 반환연산 시 기존 객체 변경
함수 호출값 복사 (원본 영향 없음)참조 복사 (원본 변경 가능)
대표 예시number, string, booleanobject, array, function


정리

  • 기본형 (Primitive Type) → 값 자체를 저장하고 복사됨
  • 참조형 (Reference Type) → 주소(참조값)를 저장하고 공유됨
This post is licensed under CC BY 4.0 by the author.