자바스크립트 데이터타입_0524TIL

박지혜·2023년 5월 25일
0
post-thumbnail

파고들수록 헷갈리는 데이터 타입1

데이터 타입에는 두 가지가 있다. 이 데이터 타입을 구분하는 기준은 1) 값의 저장 방식, 2)불변성 여부 이다.

  • 값의 저장 방식(복제방식)
    기본형: 값이 담긴 주솟값을 바로 복제
    참조형: 값이 담긴 주솟값들로 이루어진 묶음을 가리키는 주솟값을 복제

  • 불변성의 여부
    기본형: 불변하다
    참조형: 가변하다(불변성을 띄지않는다)

불변성의 여부는 메모리의 관점에서 봐야 정확히 알 수 있다.

메모리와 데이터

메모리는 비트, 바이트 단위로 나뉘는데 1바이트 = 8비트 로 만들어진다.
모든 데이터는 바이트 단위의 식별자인 메모리 주솟값을 가지고있다.

let a = 3
// let a는 식별자(변수명)
// 3은 변수(데이터)

변수 선언과 데이터 할당

// 선언과 할당을 풀어 쓴 방식(이해하기 편함)
let a; // 선언
a = 2 // 할당
// 선언과 할당을 붙여 쓴 방식
let a = 2

변수와 데이터에 값을 나눠서 넣는다

ex) 1002라는 주솟값에 a 라는 변수명을 넣고, 5002라는 주솟값에 2라는 데이터를 넣는다.
그럼 변수명 a에 할당된 데이터의 주솟값은 5002가된다.
만약 데이터가 3으로 변경됐다면, 5002에 있는 2라는 데이터를 변경하는게 아니라, 비어있는 5003의 주솟값에 3이라는 데이터를 넣고, a에 할당된 데이터의 주솟값을 5003으로 바꾸는 것이다.
그래서 2라는 값이 담긴 주솟값, 3이라는 값이 담긴 주솟값은 둘다 존재하되, 데이터 영역 메모리만 변경하여 값 자체는 불변하다 라고 할 수 있다. (나중에 5002의 주솟값은 가비지컬렉터 대상이 됨)

변수 영역에 값을 바로 할당하지 않고 한단계를 거치는 이유는 바로 데이터 변환을 자유롭게 할 수 있게 함과 동시에 메모리를 더욱 효율적으로 관리하기 위함이다.

데이터는 언제든 바뀔 수 있다. 데이터 변환하려할 때 훨씬 더 큰 데이터를 저장하려면 5003 이후부터 저장되어있는 모든 데이터를 다 미뤄야하는 일이 발생할 수 있다. (차지하는 주솟값이 많아질텐데 그 전에 이미 해당자리에 데이터가 저장되어 있을 수 있기 때문)
또한, 변수명이 데이터를 저장할때 직접 저장하지 않고 해당 주솟값에 할당되어 저장된다면, 중복된 데이터를 처리할 때도 효율성이 높아진다.

0개의 댓글