620 words
3 minutes
원시값과 객체의 값 저장 동작

🩵 객체 안의 프로퍼티가 원시값을 가질 때, 메모리 동작 방식#

let obj = { value: 10 };  // 객체 생성 (참조 타입)
let copy = obj;  // 같은 객체를 참조 (참조값 복사)

copy.value = 20;  // 프로퍼티 변경 (새 메모리 할당 X)

console.log(obj.value);  // 20 (원본도 변경됨)

📌 객체 안의 프로퍼티는 원시 값을 가질 수 있지만, 객체 자체는 참조 타입이므로 프로퍼티를 변경해도 새로운 객체가 생성되지 않는다.

📌 반면, 원시 값을 변수에 직접 할당하면 새로운 메모리 공간을 할당받고 복사된다.

🚀 즉, “원시값의 불변성”은 유지되지만, 객체 프로퍼티는 새로운 메모리 공간을 할당하지 않고 바로 변경 가능하도록 동작한다.

🩵 자바스크립트에서 값이 원시 타입인지 객체 타입인지 판단하기 전에, 먼저 프로퍼티 여부를 확인하는가?#

📌 실행 과정 (변수 선언 → 할당 → 타입 확인)#

자바스크립트는 변수 선언을 먼저 실행(호이스팅)한 후, 코드 실행 순서대로 변수에 값을 할당할 때 원시 타입인지 객체 타입인지 판별한다.

할당된 값이 원시 값이면 “값 자체”를 저장하고, 객체면 “참조 값”을 저장한다.

변수에 접근할 때도 먼저 “객체인지 확인하고” 이후 원시 값인지 판단하여 적절한 동작을 수행한다.

정리

“변수에 저장된 원시값은 값 자체를 저장하지만, 객체 프로퍼티로 저장된 원시값은 객체 내부에서 관리되므로 새로운 객체가 생성되지 않는다.”

“자바스크립트는 변수 선언을 먼저 실행(호이스팅)한 후, 값이 할당될 때 비로소 원시 타입인지 객체 타입인지 판단한다.”

✅ 값에 의한 전달 vs 참조에 의한 전달 (핵심 차이 정리)#

  • 값에 의한 전달 (Pass by Value) → 값 자체를 복사하여 전달 → 서로 독립적 → 변경해도 원본에 영향 없음
  • 참조에 의한 전달 (Pass by Reference) → 메모리 주소(참조 값)를 전달 → 같은 객체 공유 → 변경 시 원본도 영향받음
원시값과 객체의 값 저장 동작
softourr.github.io/원시값과-객체의-값-저장-동작.md
Author
softourr
Published at
2025-03-25