FRONT-END/TIL

[TIL] 230120 데이터 타입

서근 2023. 1. 21. 01:22
반응형

데이터 타입

오늘은 코어 자바스크립트의 챕터 1 데이터 타입에 대해 알아보았다.

기본형과 참조형

  • 기본형
    • string, number, boolean, null, undefined, symbol
  • 참조형
    • object
  • 객체의 하위분류
    • array, function, date, 정규표현식, map, weakmap, set, weak set

데이터 할당

데이터를 할당할 때 메모리의 영역은 크게 변수 영역과 데이터 영역으로 나뉜다. 변수 영역에는 변수로 선언해 준 식별자가 들어가고 그 식별자는 데이터 영역의 빈 공간 어딘가의 주소에 저장된다. 그리고 기존 데이터가 변경되거나 추가되면 주소 안의 값이 같이 변경되는 것이 아닌, 새로운 공간에 새롭게 데이터를 저장하게 된다.

불변값

기본형은 불변성 값을 다른 데이터에 저장해서 주소값을 참조 재사용

 

변수는 바꿀 수 있고, 상수는 바꿀 수 없다. 기본형은 모두 불변값. 한 번 만들어진 값은 영원히 변하지 않는다.

 

변수 영역 메모리 - 한 번 데이터 할당이 이뤄지고 다른 공간에 다른 데이터를 재할당 있는지 여부에 따라 변수 상수가 구분된다.

데이터 영역 메모리 - 불변성 여부를 구분할 때 변경 가능성의 대상

 

변수영역에 변수명이 들어감 ➜ 데이터 영역에 값이 들어감

 

예를 들어 변수 a에 5를 할당하고 변수 c에도 5를 만들면, 데이터 영역에서 5를 찾고 그 주소를 재활용해 넣어주고, 만약 데이터 영역에서 5가 없다면 새로운 데이터 공간을 만들어 저장한다.

가변값

참조형 데이터는 가변일 수도 불변일 수 도 있다.

 

기본형 데이터와 차이점은 객체 변수 영역이 존재한다는 점. 객체의 변수 명이 이곳으로 들어간다.

 

참조형 데이터는 크게 변수 영역과 데이터 영역, 객체 영역으로 나뉜다.

 

변수영역에 변수명이 들어감 ➜ 데이터 영역에 값이 들어감 ➜ 객체 변수 영역에 key가 들어감

기본형 데이터와의 차이

객체 변수 영역이 별도로 존재. 데이터 영역은 기존 메모리 공간을 그대로 활용. 재활용도 가능. 모두 불변값. 하지만 변수에는 다른 값이 얼마든 대입 가능.

 

참조형을 재할당할 때, 만약 변수명이 존재했다면 변수영역에서 변경하지 않음

 

값을 데이터 영역 주소 어딘가에 저장, 그것을 객체 변수영역에 key값을 주소에 저장.

 

undefined - 사용자의 의도를 파악해 알아서 넣어준다.

null - 사용자가 없다고 지정을 해주면 null

질문과 답변 섹션

  • 다른 언어에서는 어떻게 데이터 타입을 정의할까요?
    • 어떤 변수는 어떤 타입이 들어가며 배열일 경우에는 몇 개 묶어놨기 때문에 얼마다라고 정의한다.
      • JAVA, C++, C
  • 다른 언어들처럼 데이터 타입을 다룬다면 장단점은 무엇이 있을까요?
    • 안정성이 높다.
    • 러닝타임 중 예상치 못한 에러가 적어진다.
  • 왜 자바스크립트에는 undefined와 null이 있을까?
    • 자바스크립트에서 코드를 짤 때는 절대 undefined는 직접 할당하면 안 된다. 만약 값이 없음을 할당해주고 싶다면 반드시 null을 사용한다.
  • 변수와 식별자는 어떻게 다를까?
    • 변수는 값을 담을 수 있는 그릇에 해당하고, 식별자는 해당 변수가 데이터에 어디에 있는지 참조할 때 사용되는 이름, 즉 변수 이름이다.
  • 얕은 복사와 깊은 복사는 어떠한 차이점이 있을까?
    • 얕은 복사는 같은 데이터 메모리 위치정보를 참조한다.
    • 깊은 복사는 주소값을 복사하지 않고 실제값을 복사한다.