ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 코어 자바스크립트 핵심 정리 (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(===)을 써야만 정확히 판별할 수 있음

Designed by Tistory.