[코어자바스크립트] 1. 데이터타입

박현정·2021년 11월 18일
2

Javascript

목록 보기
1/4
post-thumbnail

💡 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주차 스터디 회고

프로젝트를 하면서 익힌 것들을 개념과 연결시키고 알지 못했던 지식을 공부하려고 참여하였다. 기본형과 참조형을 알고만 있었지 차이점은 잘 인지하고 있지 못했는데 책에서 정말 차근차근 설명을 해주어 평소의 궁금증과 왜 내가 구현한 코드가 내가 생각한대로 동작하지 않았는지 인지하며 다음엔 신경쓰며 구현해봐야겠다는 다짐을 할 수 있는 시간이라 좋았다. 아쉬웠던 점은 내가 평소에 궁금했던 부분을 이해하며 읽느라 주어진 시간안에 책을 다 읽지 못해 의견을 공유할 때 많이 참여하지 못했다. 각자 이야기 해보는 시간을 잘 이용해야 좋을 것 같아 다음엔 더 노력해봐야겠다.

profile
FE DEVELOPER🐧

0개의 댓글