• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

궁금한점 질문드립니다!

23.06.17 14:32 작성 조회수 358

0

13:05부분 보면

yuJin1과 yuJin3가 각각 다른 메모리 주소를 갖고 있기 때문에 false라고 하셨는데

만약 let a = 1; let b = 1;이면 a === b는 true잖아요

제가 배우기로는 a와 b가 같은 주소 값을 가르키고, 같은 주소 값을 가르키는 이유는 JS 엔진이 메모리 최적화를 위해 메모리를 공유한다던데

왜 참조 타입인 객체는 메모리 최적화를 위해 메모리를 공유하지 않나요??

답변 1

답변을 작성해보세요.

0

안녕하세요!

말씀주신 예제에서 a와 b가 같은 메모리 공간을 가리키는 이유는 primitive 값이기 때문입니다.

'최적화' 때문에 이렇게 설계된건지는 모르겠지만 같은 primitive 값의 메모리 공간을 하나로 통일하는건 논리적으로 당연한 일입니다.

1이라는 값을 실제 primitive 형태로 사용한다 생각했을때 다른 메모리 공간을 참조했으면 하는 시나리오는 아마 없을겁니다.

객체가 생성될때마다 다른 메모리 공간을 가리키게 하는건 JS 뿐만 아니라 대부분의 언어에서 똑같이 작동합니다. 만약에 값이 똑같다고 매번 같은 주소를 차지하게밖에 못한다면 같은 프로퍼티들을 들고있는 객체들을 여럿 생성하고싶은 시나리오가 있을때 문제가 됩니다. 하나의 객체의 값만 변경하면 모두 변경되기 때문이죠.

대부분의 언어가 이런 시나리오를 따르는 이유는 이런 흐름이 논리적이기 때문입니다. (제가 모든 언어를 다 아는건 아니니까 대부분의 언어라고 했지만 제가 아는 한에서는 모든 언어가 그렇습니다.)

그리고 정확히 따져보면 강의에서도 보여드린것처럼 객체를 생성할때 같은 값을 갖고 있더라도 생성의 순간에는 매번 새로운 메모리 공간을 차지하는 것 뿐입니다. 변수에 변수를 직접 assign 하는경우 값이 객체더라도 copy by reference 입니다.

감사합니다!