원시 값과 객체 비교

_dodo_hee·2023년 9월 7일
0

핸드북

목록 보기
26/29
post-thumbnail

원시 값과 객체 비교
동적 타이핑을 지원하는 자바스크립트에서 데이터의 타입을 크게 2개로 나누는 이유가 있을까요?
값에 의한 전달이 뭔가요?
참조에 의한 전달이 뭔가요?

원시 값과 객체 비교

자바스크립트가 제공하는 7가지 데이터 타입(숫자, 문자열, 불리언, null, undefined, 심벌, 객체 타입)은 크게 원시 타입과 객체 타입으로 구분할 수 있다.

원시 값

변경 불가능한 값

원시 값을 변수에 할당하면, 변수에는 실제 값이 저장된다.
원시 값을 갖는 변수를 다른 변수에 할당하면 원본의 원시 값이 복사되어 전달된다.
"값에 의한 전달"

객체

변경 가능한 값

객체를 변수에 할당하면 변수에는 참조 값이 저장된다.
객체를 가리키는 변수를 다른 변수에 할당하면 원본의 참조 값이 복사되어 전달된다.
"참조에 의한 전달"

자바스크립트에서 데이터타입을 2가지로 나누는 이유

자바스크립트 엔진이 평가된 값에 따라 타입을 나눈다.

메모리 공간 확보에 있다.

값은 2진수로 메모리에 저장되며, 변수는 해당 메모리 공간의 주소값을 가리키게 되는데,
이때 필욯나 최소 메모리 공간의 데이터 타입에 따라 다르다.
이외에도 데이터 타입이 필요한 이유에는 몇가지가 더 있다.

  • 값을 저장할때 확보해야하는 메모리 공간의 크기를 결정하기 위해
  • 값을 참조할 때 한번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해
  • 메모리에 읽어 들인 2진수를 어떻게 해석해야할지 결정하기 위해

값에 의한 전달

숫자, 문자, Boolean 등 원시값이 담긴 객체에서 이뤄진다.

  • 전달하는 변수에 저장된 “값”을 다른 메모리 공간에 복사하여 전달받는 변수에 전달한다.
  • 원본과 사본 어느 한 쪽을 변경해도 다른 쪽이 영향을 받지 않는다.
  • 즉 둘은 별개의 값이 되며, 서로 간섭할 수 없다.

참조에 의한 전달

객체와 배열 등 객체 타입의 값을 할당할 때 이뤄진다.

  • 전달하는 변수에 저장된 “참조값(할당된 객체가 담긴 메모리 주소)”을 다른 공간에 복사하여 전달받는 변수에 전달한다.
  • 변수들이 메모리 주소를 통해 같은 객체에 접근할 수 있다. 즉, 두 개의 식별자가 하나의 객체를 “공유” 한다.
  • 원본과 사본 어느 한 쪽에서 객체를 변경하면 서로 영향을 주고받는다.
profile
무럭무럭 자라나는 도도 개발성장일기

0개의 댓글