💡 1차로 코어자바스크립트 스터디를 하며 중요한 부분들 정리(21.11.19)
데이터 타입
기본형
number, string, boolean, null, undefined, (ES6) symbol
값이 담긴 주솟값을 바로 복제
참조형
Object: array, function, date, regExp (es6)Map, WeakMap, Set, WeakSet
값이 담긴 주솟값들로 이루어진 묶음을 가리키는 주솟값을 복제
변수 선언
변경 가능한 데이터가 담길 수 있는 공간 또는 그릇을 만든다.
데이터 할당
- 실제로 해당 위치에 데이터를 직접 저장하지 않는다.
- 변수와 데이터를 별도의 공간에 나눠 저장하며, 데이터의 성질에 따라
변수영역
, 데이터 영역
으로 구분
- 데이터 변환을 자유롭게 할 수 있게 함
- 메모리를 더욱 효율적으로 관리
- 중복된 데이터에 대한 처리 효율이 높아짐
- 기존 문자열에 어떤 변환을 가하든 상관없이 무조건 새로 만들어 별도의 공간에 저장
기본형 데이터와 참조형 데이터
불변값
- 불변값은 상수와 같은 개념이 아니다.
- 변수와 상수의 구분 대상은
변수 영역
메모리, 불변성 여부의 구분 대상은 데이터 영역
메모리.
- 기본형 데이터로 이미 데이터 영역에 만들어졌다면 바꿀 수 없고, 새로 추가만 가능하다.
- 한 번 만들어진 값은 가비지 컬렉팅을 당하지 않는 한 영원히 변하지 않습니다.
가변값
- 기본형 데이터와의 차이: 객체의 변수(프로퍼티)영역이 별도로 존재한다.
- 객체의 변수영역에는 얼마든지 값을 대입 할 수 있다. 즉 불변하지 않는다(가변값)
가비지 컬렉터(GC)
참조 카운트 : 어떤 데이터에 대해 자신의 주소를 참조하는 변수의 개수
- 참조 카운트가 0인 메모리 주소는 가비티 컬렉터의 수거 대상이 된다.
- 가비지 컬렉터는 런타임 환경에 따라 특정 시점이나 메모리 사용량이 포화 상태에 임박할 때마다 자동으로 수거 대상들을 수거 한다.
- 수거된 메모리는 다시 새로운 값을 할당할 수 있는 빈 공간이 된다.
불변 객체
값으로 전달 받은 객체에 변경을 가하더라도 원본 객체는 변하지 않아야 하는 경우 필요.
얕은 복사
바로 아래 단계의 값만 복사
- 중첩된 객체에서 참조형 데이터가 저장된 프로퍼티를 복사할 때 주솟값만 복사된다.
- 그러면 원본 사본 모두 동일한 참조형 데이터의 주소를 가리키며 즉 사본이 바뀌면 원본도, 원본이 바뀌면 사본도 바뀐다.
깊은 복사
내부의 모든 값들을 하나하나 찾아서 전부 복사
- 객체의 프로퍼티 중에서 기본형 데이터일 경우에는 그대로 복사하면 되지만, 참조형 데이터는 다시 그 내부의 프로퍼티들을 복사 해야 한다.
undefined와 null
'없음'을 나타내는 값으로 undefined와 null이 있지만 둘은 미세하게 다르고 목적도 다르다.
undefined
- 사용자가 명시적으로 지정
- 값이 존재 하지 않을 때 엔진이 자동으로 부여
- 값을 대입하지 않은 변수
- 객체 내부의 존재하지 않는 프로퍼티에 접근하려고 할 때
- return 문이 없거나 호출되지 않는 함수의 실행 결과
- 비어있는 요소 != undefined
그렇다면 undefined와 null은 어떨 때 사용하나?
- 직접 undefined를 할당하는 것을 지양하고, 자바스크립트 엔진이 반환하는 경우에만 undefined에 해당하게 해주기
- 직접 '비어있음'을 명시하고 싶을 땐 null을 사용하면 된다.
- 하지만 typeof null은 object 이므로 동등연산자(==)로 비교할 경우 null과 undefined는 같다. 따라서 둘을 비교하려면 일치연산자(===)를 써야한다.
✍1주차 스터디 회고
프로젝트를 하면서 익힌 것들을 개념과 연결시키고 알지 못했던 지식을 공부하려고 참여하였다. 기본형과 참조형을 알고만 있었지 차이점은 잘 인지하고 있지 못했는데 책에서 정말 차근차근 설명을 해주어 평소의 궁금증과 왜 내가 구현한 코드가 내가 생각한대로 동작하지 않았는지 인지하며 다음엔 신경쓰며 구현해봐야겠다는 다짐을 할 수 있는 시간이라 좋았다. 아쉬웠던 점은 내가 평소에 궁금했던 부분을 이해하며 읽느라 주어진 시간안에 책을 다 읽지 못해 의견을 공유할 때 많이 참여하지 못했다. 각자 이야기 해보는 시간을 잘 이용해야 좋을 것 같아 다음엔 더 노력해봐야겠다.