Core Javascript | 데이터 타입

Soojeong Lee·2021년 10월 8일
0

core-javascript

목록 보기
4/4

코어 자바스크립트를 보며 공부한 내용입니다.

1. 데이터 타입의 종류

1-1. 기본형(primitive type)

불변값을 가진다.

  • Number(숫자)
  • String(문자열)
  • Boolean(T,F)
  • null
  • undefine

1-2. 참조형(reference type)

가변값을 가진다.

  • Object(객체)
    • Array(배열)
    • Function(함수)
    • Date(날짜)
    • RegExp(정규표현식)

2. 데이터 타입에 관한 배경 지식

모든 데이터는 바이트 단위의 식별자, 즉 메모리 주솟값을 통해 서로 구분하고 연결합니다.

3. 변수 선언과 데이터 할당

3-1. 변수

  • 변수 : 변경가능한 데이터가 담길 수 있는 공간
  • 식별자 : 그 변수의 이름
  • 변수 선언?
    1. 컴퓨터는 메모리의 빈 공간에 식별자 저장
    2. 그 공간에 자동으로 undefine 할당
    3. 그 변수에 기본형 데이터를 할 당하려고 하면 별도의 공간에 데이터를 저장
    4. 그 공간의 주소를 변수의 값 영역에 할당

4. 기본형 데이터와 참조형 데이터

기본형 데이터

  • 모두 불변 값이다.
  • 즉, 한번 만든 값은 변경이 불가능하며 변경은 새로 만드는 동작을 통해서만 이루어진다.
  • 한 번 만들어진 값은 가비지 컬렉팅을 당하지 않는 한 영원히 변하지 않는다.

참조형 데이터

  • 기본 적인 성질은 가변값인 경우가 많다.
    : 객체의 변수(프로퍼티) 영역이 별도로 존재하기 때문에, 참조형 데이터는 불변하지 않다(가변값이다).
  • 하지만, 모두 가변값일 것 같지만 설정에 따라 변경이 불가하거나 아예 불변 값으로 활용하는 방법이 있다.
  • 중첩 객체(nested object): 참조형 데이터의 프로퍼티에 다시 참조형 데이터를 할당하는 경우.
    이때, 참조형 데이터를 재할당하는 경우 참조 카운트가 0이 되면 메모리 주소는 가비지 컬렉터의 수거 대상이 된다.
    -> 참조 카운트 : 어떤 데이터에 대해 자신의 주소를 참조하는 변수의 개수
    -> 가비지 컬렉터 : 런타임 환경에 따라 특정 시점이나 메모리 사용량이 포화 상태에 임박할 때마다 자동으로 수거 대상들을 수거한다. 이때 수거된 메모리는 다시 새로운 값을 할당할 수 있는 빈 공간이 된다.

변수 복사 비교

  • 변수 복사 과정은 기본형, 참조형 데이터 모두 같은 주소를 바라보게 되는 저에서 동일하다.
  • 복사 과정은 동일하나, 데이터할당 과정에서 이미 차이가 있기 때문에 변수 복사 이후 동작 차이가 있다.
    -> 자바스트립트의 모든 데이터 타입은 참조형 데이터이다.
    -> 기본형은 주솟값을 복사하는 과정이 한 번 만 이뤄지고, 참조형은 한단 계 더 거치게 된다.
    -> 참조형 데이터가 '가변'이라고 설명 할 때 '가변'은 참조형 데이터 자체를 변경할 경우가 아니라 내부 프로퍼티를 변경할 때만 성립하는 것이다.

5. 불변 객체

:값으로 전달받은 객체에 변경을 가하더라도 원본 객체는 변하지 않아야 하는 경우 필요

  • 얕은 복사
    : 바로 아래 단계의 값만 복사하는 방법
  • 깊은 복사
    : 내부의 모든 값들을 하나하나 찾아 전부 복사하는 방법

즉, 기본형 데이터의 경우 그대로 복사하면 되지만 참조형 데이터는 다시 그 내부의 프로퍼티를 복사하기 때문에 깊은 복사가 필요하다.

6. undefined와 null

undefined와 null 은 없음을 나타내는 값

  • undefined : 어떤 변수에 값이 존재하지 않을 경우
    다만, 본래의 의미에 따라 사용자가 없음을 표현하기 위해 명시적으로 undefined를 대입하는 것은 지양해야함.
  • null : 사용자가 명시적으로 '없음'을 표현하기 위해 대입한 값
    주의점 ! type of null은 object이다. 따라서, 비교할 경우 동등연산자(==)이 아닌 일치연산자(===)을 써야 판별할 수 있다.
profile
🍼 newbie frontend developer

0개의 댓글