원시자료형과참조자료형

jina Seo·2022년 11월 7일
0

원시자료형과참조자료형

  • 원시자료형은 값을 저장하고, 변수에 하나의 데이터를 저장한다. 참조자료형은 데이터가 담긴 저장소의 주소를 변수에 저장한다
  • 즉, 변수에는 원시 값 혹은 주소만 지정할 수 있고 주소는 크기가 변하는 특별한 데이터 저장소를 참조하게 된다.
  • 실제로 참조자료형의 데이터가 담긴 곳을 heap이라고 부르고 동적으로 변한다(자기 맘대로 사이즈를 늘렸다 줄였다함)\
  • 변수1에 변수2를 할당한 후 변수2의 값을 바꾸면 변수1의 값이 변할까? (원시자료형은 x 참조자료형은 o)
    • 원시자료형을 할당하는 경우 그 값 자체를 변수에 할당함. 즉 그 값을 복사하여 변수에다 저장하게 됨
let x = 2;
let y = x;
// 변수 x 를 변수 y에 할당하는 경우 변수 x의 값이 원시자료형이기때문에 x의 값이었던 2를 y에 복사하여 할당하고 
y = 3; 
// y에 3이 할당되어도 x의 값은 여전히 2. x의 값을 y로 복사하여 할당했기때문
  • 참조자료형이 변수에 할당되는 경우 변수에 이 데이터가 저장되는 곳의 주소가 할당된다.
let x = { foo: 3 };
let y = x; // x의 값은 {foo:3}의 주소를 y에 할당한다
y.foo = 2; 
//x.foo 는 2 가 출력된다. 같은 **주소**를 바라보고 있기때문

그럼 아래에서 x.foo는 어떨까

let x = { foo: 3 };
let y = x; //y는 x의 주소값을 할당받았지만
y = 2; // 다시 2를 할당받았기때문에
//x.foo는 3이 그대로 있게 됨

함수에서 원시자료형과 참조자료형을 보자

let score = 80;
function doStuff(value) {//매개변수 value에  score의 값 80이 전달되고
  value = 90; //value에 90이 할당
}

doStuff(score)
//원시자료형이므로 값자체를 복사하여 전달하게되고 함수에서 어떤일이 발생했던가와 상관없이 score의 값은 80
let player = { score: 3 };
function doStuff(obj) { //매개변수에  {score:3}이 들어있는 주소값이 할당됨
  obj.score = 2; obj와 player 는 같은 주소값을 가지고 있음
}

doStuff(player); //따라서 player.score의 값도2가 됨
profile
운동하는 개발자가 꿈입니다?

0개의 댓글