개념/Javascript(23.03.27~)

[Javascript] 데이터 타입 - 메모리와 데이터, 변수 선언과 데이터 할당, 기본형 데이터와 참조형 데이터, 불변 객체, undefined와 null

Lethargin 2023. 5. 25. 23:25
js에서 데이터 타입 : 기본형 / 참조형

 

-구분 기준 : 값의 저장 방식 & 불변성 여부

  기본형 참조형
값의 저장 방식
(=복제의 방식)
-값이 담긴 주소값을 바로 복제 -(값이 담긴 주소값들로 이루어진 묶음을 가리키는) 주소값을 복제
불변성
(메모리, 데이터 관련 이해 필요)
불변성 o 불변성 x

 

 

메모리와 데이터
-불변성 개념 이해 위해 필요

◆비트

-컴퓨터가 이해할 수 있는 가장 작은 단위

-0과 1을 가지고 있는 메모리를 구성하기 위한 작은 조각

-비트가 모여서 -> 메모리 구성

-예를 들어, 64비트 = 8 바이트

◆바이트

◆메모리

-byte 단위로 구성

-모든 데이터는 byte 단위의 식별자인 메모리 주소값을 통해서 서로 구분

   예) 64비트(8비트) 정수를 -> 메모리에 저장하려면?

-64비트를 8바이트로 분할

-각 바이트를 메모리에 저장

-결론적으로, 64비트 정수는 메모리에서 8개의 연속된 바이트에 저장됨

 

❗️결론적으로, js는 다른 언어랑 달리 데이터 타입 지정 안해줘도 됨. 메모리 이슈 고민 안해도 됨!

 

 

식별자, 변수 & 변수 및 데이터 할당

var a = 3

-var a 부분이 =>식별자 -> 변수명

-3 부분이 => 변수 -> 데이터

(🤔....??????)

❗️변수=데이터  /  식별자=변수명

 

❶var a=3, var str='test!'처럼 기본형 데이터인 경우

❷참조형 데이터(객체⊃배열, 함수)인 경우

-값을 바꿀 수 있으므로, 참조형 데이터는 가변함

 

❸중첩객체인 경우

var obj = {
	x: 3,
	arr: [3, 4, 5],
}

 

❹변수 복사한 경우 vs 복사 이후, 값 변경한 경우

b = 15 //1. 기본형 변경

obj2.c = 20 //2. 참조형 변경..인데 객체의 프로퍼티를 변경한 경우 ⭐️

-결과: obj1 === obj2라는, 원하지 않는 결과값

 

vs

 

obj2 = { c: 20, d: 'ddd' }  //객체 자체를 변경한 경우

-결과: obj1 !== obj2

 

 

불변객체

-문제: 가변이기 때문에 user1 === user2 문제 발생

  해결방법

-1. 객체의 프로퍼티에 접근(x) , 아예 새로운 객체 반환(o) -> 하드코딩의 문제[...]

-2. (for~in구문을 활용한)얕은복사 -> 중첩된 객체에 대해서는 완벽한 복사 불가

-3. (재귀적 수행을 활용한)깊은복사

-4. JSON 이용방법 -> 완벽 x

 

 

undefined와 null
undefined null
-값이 있어야 할 것 같은데 없는 경우, js엔진에서 자동으로 부여

❶값이 할당되지 않은 변수에 접근한 경우
❷객체) .이나 []로 접근함 -> 근데 해당 프로퍼티가 지정되지 않은 경우
❸return 문이 없거나 호출되지 않는 함수의 실행 결과
-‘없다’를 명시적으로 표현할 때


※주의
console.log(type of null) === 'object'
-> js에서의 유명한 자체 버그
❗️개발자가 '값이 없음'을 명시적으로 알리고 싶을 때 : undefined 대신 null을 사용하자