자바스크립트 문법 종합반
-데이터 타입(심화)
(1) 데이터 타입의 종류(기본형과 참조형)
(2) 메모리와 데이터에 관한 배경지식
(3) 변수 선언과 데이터 할당
(4) 기본형 데이터와 참조형 데이터
(5) 불변 객체
(6) undefined와 null
(1) 데이터 타입의 종류(기본형과 참조형)
JS 엔진이 코드/함수를 어떻게 메모리에 저장하고 실행하는 지의 메커니즘을 이해하는 것이 중요하다
1. 데이터 타입 심화
1-1. 데이터 타입의 종류(기본형과 참조형)
1-1-1. 기본형 (primitive type)
1-1-2. 참조형 (reference type) : 주로 크기가 큼. 객체다.
기본형과 참조형의 구분 기준
(1) 값의 저장 방식 ( = 복제의 방식)
1. 기본형 : 값이 담긴 주소값을 바로 복제
2. 참조형 : 값이 담긴 주소값들로 이루어진 묶음을 가리키는 주소값을 복제
(2) 불변성 여부
1. 기본형 : 불변성을 띔 = 불변하다
2. 참조형 : 불변성을 띄지 않음
“불변성을 띈다” 이 말을 이해하기 위해서 메모리와 데이터에 대한 내용을 이해해야만 한다.
(2) 메모리와 데이터에 관한 배경지식
1-2 메모리와 데이터에 관한 배경지식
1-2-1. 메모리, 데이터
(1) 비트 (0, 1)
: 컴퓨터가 이해할 수 있는 가장 작은 단위, 메모리를 구성하기 위한 0과 1을 가지고 있는 작은 조각을 의미, 이 작은 조각들이 모여서 여러분들이 흔히 들으시는 ‘메모리’가 만들어짐
(2) 바이트
: 0과 1만 표현하는 비트를 모두 찾기는 부담이기떄문에 바이트 단위를 만들게됨, bit 8개를 모아놓은 하나의 단위임
(3) 메모리(memo +ry): byte 단위로 구성
: 모든 데이터는 byte 단위의 식별자인 메모리 주소값을 통해서, byte는 서로 서로 다 구분이 된다.
질문 : 만일, 64비트(8바이트) 정수는 메모리에 어떻게 저장할 수 있을까?
정답 : 64bit = 8byte. 큰 메모리 조각에 8개의 자리를 차지하게 된다. (각 바이트는 8개의 비트를 가므로 64비트 정수는 메모리에서 8개의 연속된 바이트에 저장된다.)
(4) java, c와 다른 javascript의 메모리 관리 방식(feat.정수형)
- 직접 변수의 크기를 개발자가 지정해야 하는 경우도 있다.
-예를 들어, JS 에서는 정수형을 8bype로 저장하는데 (let a = 8;), JAVA 에서는 4가지 방식으로...keyword마다 byte 크기가 정해져있다. byte a = 8(1byte), short a = 8(2byte), int a = 8(4byte), long a = 8(16byte) 처럼
1-2-2. 식별자, 변수
(1) var testValue = 3 // testValue가 식별자, 3이 변수이다.
(2) 변수 = 데이터
(3) 식별자 = 변수명
(3) 변수 선언과 데이터 할당
/** 선언과 할당을 풀어 쓴 방식 */
var str;
str = 'test!';
/** 선언과 할당을 붙여 쓴 방식 */
var str = 'test!';
값을 바로 변수에 대입하지 않는 이유(=무조건 새로 만드는 이유)
1. 자유로운 데이터 변환
2. 메모리의 효율적 관리
(4) 기본형 데이터와 참조형 데이터
기본형 데이터(primitive type)과 참조형(reference type)데이터를 구분짓는 차이점은
1. 값을 저장하는 방식
- 기본형 데이터: 값이 담긴 주소값을 바로 복제
- 참조형 데이터: 값이 담긴 주소값들로 이루어진 묶음을 가리키는 주소값을 복제
2. 불변함의 여부
Q. 여기서 '불변하다'라는 뜻은?
: 데이터 영역에서 메모리를 변경할 수 없다는 뜻
(5) 불변 객체
깊은 복사 : 기본형 데이터를 그대로 복사 + 참조형 데이터는 다시 그 내부의 프로퍼티를 복사
-> 재귀적 수행(recursive)
: 함수나 알고리즘이 자기 자신을 호출하여 반복적으로 실행되는 것
var deepCopy = function(targetObj) {
var result = {};
if (typeof targetObj === 'object' && target !== null) { // 복사하려는 객체가 그 타입이 객체이고 동시에 null(빈값)이 아니라면
for (var prop in targetObj) { // 복사하려는 객체 안에 있는 프로퍼티(변수)들을 하나하나 돌아가며 체크한다
result[prop] = copyObjectDeep(targetObj[prop]); // 하나하나 체크하면서 복사하려는 객체 안에 있는 각 프로퍼티들을 새로운 result 라는 객체에 복사한다
}
} else { // 만약 복사하려는 객체가 객체가 아니거나 또는 null이 아니라면
result = targetObj; // 일반 복사를 실행한다.
}
return result;
}
(6) undefined와 null
type of null 이 object 인 것은 유명한 JS의 버그이다.
'부트캠프 개발일지 2023-2024 > JavaScript 자바스크립트' 카테고리의 다른 글
[2주차] 자바스크립트 문법 종합반 : 알고리즘 문제 풀이 (문자열 내 마음대로 정렬하기) (0) | 2023.10.16 |
---|---|
[2주차] 자바스크립트 문법 종합반 : Map, Set (1) | 2023.10.15 |
[2주차] 자바스크립트 문법 종합반 : 일급 객체로서의 함수 (First-Class Object) (0) | 2023.10.15 |
[2주차] 자바스크립트 문법 종합반 : es6 문법 (0) | 2023.10.14 |
[2주차] 자바스크립트 문법 종합반 : 알고리즘 문제 풀이 (문자열 내 p와 y의 개수, 음양더하기) (0) | 2023.10.14 |