Javascript

[JavaScript] 자바스크립트 | 기초 복습 변수 primitive 타입과 object의 차이점

@leem 2025. 4. 3. 21:23

자료형 구분

자바스크립트에서 변수는 다음 두 가지 방식 중 하나로 값을 저장합니다.

  • 원시 타입 (Primitive Type)
    • 숫자(number), 문자열(string), 불리언(boolean), null, undefined
  • 참조 타입 (Reference Type)
    • 객체(object), 배열(array), 함수(function) 등

이 둘은 변수에 값이 직접 저장되느냐, 아니면 주소만 저장되느냐에 따라 동작 방식이 다릅니다.


원시 타입

원시 타입은 값 자체가 변수에 직접 저장되는 구조입니다.
메모리에는 그 값이 그대로 들어가며, 변수 간의 값 복사는 단순 복사일 뿐 서로 영향을 주지 않습니다.

let number = 2;
let number2 = number;
console.log(number);   // 2
console.log(number2);  // 2

number2 = 3;

console.log(number);   // 2
console.log(number2);  // 3
  • number에는 숫자 2가 저장됩니다.
  • let number2 = number;는 number에 들어 있는 값을 그대로 복사해 number2에 저장합니다.
  • 이후 number2의 값을 변경해도, number에는 아무런 영향이 없습니다.

메모리 구조 예시

number   ─▶ 2
number2  ─▶ 2 (복사된 값)

즉, 값이 작고 단순하기 때문에 그대로 저장되며, 별도의 메모리 공간을 사용합니다.


참조 타입

객체는 복잡한 구조를 가지므로, 변수에는 값이 아닌 주소(reference) 가 저장됩니다.
이 주소는 객체가 위치한 메모리의 위치를 가리키며, 여러 변수가 같은 주소를 공유할 수 있습니다.

let obj = {
    name: 'ellie',
    age: 5,
};

let obj2 = obj;

console.log(obj.name);   // ellie
console.log(obj2.name);  // ellie
  • obj는 객체를 생성하고, 이 객체는 메모리 어딘가(예: 주소 0x123)에 저장됩니다.
  • obj 변수에는 이 주소(0x123)가 들어가며, 실제 데이터는 그 주소를 통해 접근합니다.
  • let obj2 = obj;는 그 주소(0x123)를 그대로 복사해 obj2에 저장합니다.
  • 따라서 obj2로 객체 내용을 수정하면, obj에서도 동일한 값이 반영됩니다.

메모리 구조 예시

obj   ─▶ 📦 (주소: 0x123) ─ { name: 'ellie', age: 5 }
obj2  ─▶ 동일한 0x123 주소 참조

let과 const 차이

자바스크립트에서는 변수를 선언할 때 let이나 const를 사용합니다.
이 둘은 값의 재할당 가능 여부에 따라 구분됩니다.

let a = 2;
a = 5; // 재할당 가능

const num = 2;
num = 4; // ❌ 오류 발생 – const는 재할당 불가

객체와 const

const obj = {
    name: 'ellie',
    age: 5,
};

obj.name = 'James'; // ✅ 가능
obj = {};           // ❌ 오류
  • const로 선언한 변수는 다른 값을 재할당할 수 없습니다.
  • 하지만 객체 내부의 속성은 변경 가능합니다.
  • 이는 변수에 저장된 것이 객체 자체가 아닌 객체의 주소(reference) 이기 때문입니다.
구분 저장 방식 변수 변경 시 영향 여부
원시 타입 값 자체를 저장 없음
참조 타입 메모리 주소(참조값)를 저장 있음

마무리

원시 타입과 참조 타입의 차이를 정확히 이해하면, 자바스크립트의 변수 선언, 복사, 객체 조작을 보다 확실하게 다룰 수 있습니다.
특히 React에서는 상태(state)를 변경할 때 얕은 복사, 깊은 복사 등의 개념이 자주 등장하므로, 이 기본 개념을 정확히 익혀두는 것이 중요합니다.