[JavaScript] 데이터 타입, 원시 값과 참조 값

J·2023년 6월 13일
0

JavaScript

목록 보기
7/11

자바스크립트의 데이터 타입은 크게 원시 값과 참조 값 두 가지로 나뉨.

원시 값(Primitive value)

  • 할당된 후 변경이 불가능한 기본 데이터. ****Immutability!

  • 변수에 값을 할당하면 실제 값이 변수의 메모리 공간에 저장됨. 변수에 대한 조작은 기존 값에 영향을 미치지 않음. 새로운 값을 할당하면 변수가 참조하는 메모리 공간의 주소가 변경 됨.

    // 원시 값
    
    let num1 = 10;
    let num2 = num1;
    
    num1 = 20;
    console.log(num2); // Output: 10
    • num1에 숫자 10이라는 원시 값을 할당한 후, num2에 num1을 할당함.
    • num2에는 숫자 10이라는 실제 원시 값이 저장됨.
    • num1의 값을 변경해도 num2의 값은 변경되지 않음. 원시 값은 각 변수의 메모리 공간에 별개로 저장됨.
  • 원시 값에는 Number, String, Boolean, Null, Undefined, Symbol 등이 있음.

참조 값(Reference value)

  • 변경 가능한 객체 데이터. Mutability!

  • 변수에 값을 할당하면 실제 데이터가 아닌 메모리 주소를 참조함. 이렇게 변수에 대한 조작이 원본 객체를 직접 변경할 수 있음. 변수의 메모리 공간에 객체의 참조값이 저장되기 때문에.

    // 참조 값
    
    let obj1 = { a: 1 };
    let obj2 = obj1;
    
    obj1.a = 2;
    console.log(obj2); // Output: { a: 2}
    • obj1에 { a: 1} 을 할당한 후, obj2에 obj1을 할당했음.
    • obj2에는 { a: 1} 객체의 실제 데이터가 아닌, { a: 1} 객체의 메모리 주소를 참조하는 값이 저장됨.
    • obj1 객체의 속성 a 값을 변경하면, obj2 객체의 속성 a 값도 동시에 변경됨. obj1과 obj2가 동일한 객체를 참조하기 때문.
  • 원본 객체의 변경을 피하려면 얕은 복사 또는 깊은 복사를 이용해 새로운 객체를 만들어 조작하면 됨.

    • 얕은 복사: 객체의 참조값(주소 값)을 복사.
    • 깊은 복사: 객체의 실제 값을 복사하여 새로운 객체를 만듦.
  • 참조 값에는 Object, Array, Function 등이 있음.

내일은 얕은 복사와 깊은 복사에 대해서 좀 더 알아보자~_~

profile
벨로그로 이사 중

0개의 댓글