원시 타입 변수 재할당

겨레·2024년 12월 2일

원시 타입 변수 재할당 예제에서 의문이 들었음.

10이었던 원시타입 변수 a를 20으로 변경함.
이때 값이 바뀌는 게 아니라 변수 a가 가르키고 있던 주소가
20이라는 값을 지니고 있는 주소 10FF 0010을 바라보는 게 맞는지 의문
이 생긴 것임!

그러면 변수 a랑 b는 같은 주소와 값을 갔게 되는 걸까?
처음에 내가 저기서 설명했을 땐 마치 그렇게 되는 것처럼 작성했다.

왜?? 서치해본 자료를 올린 사람들이 그렇게 말했거든...

스터디를 하면서 의견이 나왔다.
그럼 같은 주소를 바라보게 되는 거라면...
변경된 게 없는 건데, 그럼 리랜더링 안 되지 않을까? 하는...

이 의문에서 시작된 정답은!!?
처음 설명이 틀린 것이었다.


원시 타입에서 변수의 값은 직접 저장된다. 즉, 값이 변경될 때 메모리에서 값을 직접 수정하는 방식으로 동작한다는 것!

  • 초기 상태
let a = 10; // 변수 a의 값 10, 주소: 10FF 0001
let b = 20; // 변수 b의 값 20, 주소: 10FF 0010

a는 값 10을 가지고 있고, 이 값은 주소 10FF 0001에 저장된다.
b는 값 20을 가지고 있고, 이 값은 주소 10FF 0010에 저장된다.

원시 타입 변수 a값을 20으로 변경해보자...
그럼 a = b; 로 a는 b의 값 20을 갖게 되는 것이다.
그러니까 새로운 20을 갖는 게 아니라 기존에 있던 20(b가 지니고 있던)을 복사해오는 것임!


  • 변경 후
let a = 20;  // a는 주소 10FF 0001에 값 20
let b = 20;  // b는 주소 10FF 0010에 값 20

결론...

  • 주소는 변하지 않는다.
  • a는 여전히 주소 10FF 0001에 있다.
  • 변수 a는 b의 값 20을 복사받는다.
  • a는 이제 값 20을 가진 상태가 되고, a의 메모리 주소는 바뀌지 않는다.
  • 메모리에서 a와 b는 서로 다른 값을 가진 독립적인 변수이다.
  • 즉, a는 b의 값 20을 복사해서 가질 뿐이다.
profile
호떡 신문지에서 개발자로 환생

0개의 댓글