-
코어 자바스크립트 핵심 정리 (1)자바스크립트 개념 2020. 12. 23. 19:32
chapter 01) 데이터 타입
- 목적
1. 자바스크립트가 데이터를 처리하는 과정을 살펴보기
2. 기본형 타입과 참조형 타입이 다르게 동작하는 이유와 활용법>데이터 타입의 종류
- 기본형(숫자, 문자, boolean, null, undefines, symbol)
- 참조형(object, array, function, date, regExp, Map, WeakMap, Set, WeakSet 등)
>데이터 타입에 관한 배경 지식
- 0 또는 1만 표현할 수 있는 하나의 메모리 조각을 비트라고 함
- 메모리는 매우 많은 비트들로 구성. 각 비트는 id를 통해 위치를 확인할 수 있다.
- 1바이트는 8비트로 구성되어 있음 -> 0, 1 두가지로 2^16 = 65536개의 값을 표현할 수 있음
- C, C++, 자바 등의 정적 타입 언어는 메모리 낭비를 최소화 하기 위해 타입별로 할당할 메모리 영역을 나누어 놓음
- js는 메모리 용량이 과거보다 커져서 메모리 공간에 크게 구애받지 않음. 숫자의 경우 정수형인지 부동 소수형인지 구분 않고 8바이트를 확보함
- 바이트 역시 시작하는 비트의 식별자로 위치를 파악할 수 있다. 모든 바이트는 메모리 주솟값을 통해 서로 구분하고 연결할 수 있음
>변수 선언과 데이터 할당
- 변수는 변경 가능한 데이터가 담길 수 있는 공간, 식별자는 그 변수의 이름
- 실제로는 변수 주소에 데이터를 직접 저장하지 않고 데이터의 주소를 변수 영역에 저장하는 식으로 이루어진다.
why? 데이터 변환을 자유롭게 할 수 있게 함과 동시에 메모리를 효율적으로 관리하기 위함/ 변수를 선언할 때 확보한 메모리 공간 내에서만 데이터 변환을 할 수 있다면 공간을 데이터 크기에 맞게 변경하는 작업이 필요함. 이를 방지하기 위하ㅓ여 변수와 데이터를 별도의 공간에 나누어 저장함.
>기본형 데이터와 참조형 데이터
- 변수와 상수를 구분 짓는 건 변수 영역에 다른 데이터를 재할당할 수 있는지, 불변성 여부를 구분할 때는 데이터 영역을 변경할 수 있는지 확인해야 한다.
- 기본형 데이터인 숫자, 문자열, boolean, undefined, Symbol은 모두 '불변값'
why? 한 번 만든 값을 바꿀 수 없음. 변경은 새로 만드는 동작을 통해서만 이루어진다. 한 번 만들어진 값은 가비지 컬렉팅을 당하지 않는 한 변하지 않는다.
- 참조형 데이터의 프로퍼티에 다른 불변값을 대입 가능함. (객체 내부의 값이 바뀜) 이 부분 때문에 참조형 데이터는 가변값이라고 한다. (가변성은 참조형 데이터 자체를 변경할 경우가 아니라 그 내부의 프로퍼티를 변경할 때만 성립함)
- 가비지 컬렉터는 런타임 환경에 따라 특정 시점이나 메모리 사용량이 포화 상태에 임박할 때마다 자동으로 대상들을 collecting 함
>불변 객체
- 전달받은 객체에 변경을 가하더라도 원본은 변하지 않아야 하는 경우에 필요하다.
- 얕은 복사는 바로 아래 단계의 값만 복사한다. 이 말은 중첩된 객체에서 참조형 프로퍼티를 복사할 때 그 주솟값만 복사한다는 의미이다. -> 사본을 바꾸면 원본도 바뀌고, 원본을 바꾸면 사본도 바뀜!
- 어떤 객체를 복사할 때 프로퍼티가 참조형 데이터라면 재귀적으로 그 내부의 프로퍼티들도 복사해야 한다.
- hasOwnProperty 메소드를 활용해 프로토타입 체이닝을 통해 상속된 프로퍼티를 복사하지 않게끔 할 수도 있다.
- 깊은 복사를 처리할 수 있는 다른 방법 : 객체를 JSON 문법으로 표현된 문자열로 전환했다가 다시 JSON 객체로 바꾸는 방법도 있다.
>undefined와 null
- undefined가 반환되는 경우 : 값을 대입하지 않은 변수, 객체 내부에 존재하지 않는 프로퍼티에 접근하려 할 때, 리턴값이 없는 함수를 호출할 때
- 변수에 undefined를 할당했을 때와 아무것도 할당하지 않았을 때 동작이 다르다
why? undefined는 '비어있음'을 의미하긴 하지만 하나의 값으로 동작함.
- undefined를 할당해서 사용하지 말고 null을 사용할 것!
- null을 사용할 때 주의할 점 : typeof null이 object라는 점
- undefined와 null은 identity operator(===)을 써야만 정확히 판별할 수 있음
'자바스크립트 개념' 카테고리의 다른 글
코어 자바스크립트 핵심 정리 (4) (0) 2021.01.26 코어 자바스크립트 핵심 정리 (3) (0) 2021.01.19 코어 자바스크립트 핵심 정리 (2) (0) 2021.01.12