• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

primitive type의 값 변경 시 원리 질문드립니다. (immutable)

18.11.05 13:30 작성 조회수 128

0

안녕하세요.

동영상 강의를 들으면서 인터넷 자료 참고하다 이해 안되는 부분이 있어 질문 드립니다.

우선 primitive type은 immutable value라는 자료를 봤습니다.

immutable value란, "값을 재할당은 할 수 있지만, 메모리 영역에서의 변경이 불가능"임으로 이해를 했습니다.

그렇다면 들어주신 예시 중

var b = 'abc';
b = false;

구문이 실행될 때,

b가 가리키고 있던 314 주소의 값 'abc'가 바로 false로 변경되는 것이 아니라,

316 주소(새로운 주소)에 false 값이 들어가고, b가 가리키는 주소가 314에서 316으로 변경되는 것은 아닌지..헷갈려서 질문드렸습니다.

강의 잘 듣고 있습니다.

감사합니다.

답변 2

·

답변을 작성해보세요.

3

Immutable을 이해하려면 좀더 딮하게 고민해보아야 합니다. 사실 false라는 값이 다이렉트로 314에 꽂히는 것은 아닙니다. 기본형 데이터값을 저장한 별도의 메모리공간이 있습니다. (예를 들어 1000번이라고 하죠). 그러면 b=false라는 동작은 b->314. 314->1000. 1000->false 가 되겠죠.

이상태에서 다시 b=30 명령을 내리면 b->314. 314->1001. 1001->30 요런 상태가 됩니다. 그런데 이렇게 설명드리면 처음 접하는 분들 입장에서는 참조형과 기본형을 구분짓기에 더 혼란스러울 수 있어서 설명을 생략하였던 것입니다.

3

b변수는 314를 바라보고 있습니다. 그상태에서 b에 false를 넣으라고 명령한 것이니 그냥 314에 false가 들어가는 것이죠. 참조형 데이터일 경우에는 참조형 데이터를 담기 위한 별도의 공간이 필요하기 때문에 b-> 314. 314-> 316. 316->실제데이터 형태로 이루어지게 되지만 그렇다고 해서 b가 다이렉트로 316을 바라보게 되는 것은 아니며 어디까지나 316의 데이터를 ‘참조’할 뿐입니다.