- 비트 : 0과 1로 이루어진 메모리를 구성하기 위한 가장 작은 조각
- 바이트 : 비트 8개를 합친 새로운 단위
- 메모리 : 모든 데이터는 바이트 단위의 식별자인 메모리 주소값을 통해 구분
변수 선언과 데이터 할당은 풀어쓰는 것이 메모리 측면에서 더 효율적
값의 저장 방식 / 불변성(데이터 영역 메모리) 여부에 따라 기본형 데이터와 참조형 데이터로 나눔
변수와 상수
불변하다 VS 불변하지 않다
Number, String, Boolean, null, undefined, Symbol
→ 불변(데이터 영역 메모리를 변경할 수 없음)하다.
Array, Function, Date, RegExp, Map, WeakMap, Set, WeakSet
→ 객체의 변수 영역이 별도 존재, 가변성. (객체의 변수 영역은 변경 가능하므로)
☑️ 복사 이후 값 변경 시, 참조형 데이터는 객체 자체를 변경
//기본형 데이터
var a = 10;
var b = a;
//참조형 데이터
var obj1 = { c: 10, d: 'ddd' };
var obj2 = obj1;
b = 15;
obj2 = { c: 20, d: 'ddd'};
바로 아래 단계의 값만 복사
내부의 모든 값을 하나하나 다 찾아서 복사 (중첩된 객체의 경우 깊은 복사 사용)
→ 재귀적 수행(recursive) : 함수나 알고리즘이 자기 자신을 호출하여 반복적으로 실행되는 것
참조형 데이터를 복사 후 수정할 때 참조형 데이터의 가변성 때문에 복사된 객체를 수정하면 기존 객체도 바뀌게 된다. 그래서 얕은 복사를 해야하고, 객체가 중첩된 경우에는 깊은 복사를 해야한다.
대충 개념은 이해를 하겠는데, 얕은 복사와 깊은 복사를 수행하는 과정이 도통 머리에 들어오지 않는다. 개념 정리도 어려울 만큼 ㅠㅠ 내일 다시 한 번 듣고 정리해 봐야겠다. 머리가 깨질 것 같...