study: javascript | 숨참고 deep dive (6) 데이터 타입 - 221120

Lumpen·2022년 11월 20일
0

Study

목록 보기
9/92

데이터 타입은 값의 종류를 말한다
자바스크립트의 모든 값은 타입을 갖는다
ES6는 7개의 데이터 타입을 제공한다
6개의 원시 타입과 1개의 객체 타입으로 분류할 수 있다
원시 타입에는 숫자, 문자열, 불리언, undefined, null, symbol
그리고 객체 타입이 있다

1. 숫자 타입

자바스크립트는 특이하게 숫자 타입이 하나만 존재한다
자바스크립트는 모든 숫자를 배정밀도 64비트의 부동 소수점으로 표현한다

2진수, 8진수, 16진수에 대해서 모두 10진수로 표기한다

또한 세가지 특별한 값도 표현할 수 있다

  • Infinity
  • -Infinity
  • NaN (산술 연산 불가)

NaN과 하는 모든 연산은 NaN

2. 문자열 타입

문자열 타입은 텍스트 데이터를 나타내는 데 사용한다
0개 이상의 16비트 유니코드 문자의 집합으로
전세계 대부분의 문자를 표현한다
작음 따옴표, 큰 따옴표, 백틱으로 텍스트를 감싸서 표기한다

템플릿 리터럴

es6 부터는 템플릿 리터럴 표기법이 추가되었다
멀티 라인 문자열, 표현식 삽입, 태그드 탬플릿 등 편리한 문자열 처리 기능이
추가되었다
템플릿 리터럴은 런타임에 문자열로 변환되어 처리된다

멀티라인 문자열

일반 문자열은 개행을 허용하지 않는다 때문에 개행을 위해서는
이스케이프 시퀀스 \n 을 이용해 개행을 해야한다

표현식 삽입

템플릿 리터럴은 다른 문자열과 마찬가지로 + 연산을 통해
간단히 문자열을 조합할 수 있다
표현식을 삽입하려면 ${}로 표현식을 감싸 템플릿 리터럴 내부에 배치한다
강제로 표현식을 문자열로 변환하여 삽입하게 된다

3. 불리언 타입

논리적 참 거짓을 나타내는 true와 false 값으로 이루어져 있다

4. undefined

undefined 타입의 값은 undefined 이다
정의되지 않았다는 뜻을 가진 타입이자 값으로
자바스크립트에서 변수를 초기화 할 때 사용한다
때문에 사용자가 임의로 undefined 값을 주는 것은 지양하고
필요하다면 null을 사용하는 것을 권장한다

5. null

null 타입의 값은 null이다
값의 부재를 뜻하는 타입이자 값으로
변수가 이전에 참조하던 값을 더이상 참조하지 않겠다는 의미로 사용한다
값에 대한 참조를 명시적으로 제한하는 것을 의미하며
자바스크립트 엔진은 참조하지 않는 공간에 대해 가비지 컬렉션을 수행한다

6. symbol

es6 에서 추가된 7번째 타입으로 변경 불가능한 원시 타입의 값이다
다른 값과 중복되지 않는 유일한 값으로
주로 이름이 충돌할 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용한다
원시 타입 중 유일하게 Symbol 함수를 호출해 값을 생성한다
생성된 값은 외부에 노출되지 않고 다른 값과 저랟 중복되지 않는 값이다

7. 객체 타입

원시 타입을 제외한 모든 타입은 객체 타입이다
자바스크립트는 객체 기반 언어이며
자바스크립트를 구성하는 대부분의 것이 객체로 이루어져 있다

8. 데이터 타입의 필요성

데이터 타입에 의한 메모리 공간의 확보와 참조

값은 메모리에 저장하고 참조할 수 있어야 한다
확보해야할 메모리 공간의 크기를 결정해야 하는데, 이 때 데이터의 타입을 알고있으면
공간의 낭비 없이 값을 저장할 수 있다

엔진은 값의 종류에 따라 정해진 크기의 공간을 확보하는데
ECMAScript 사양은 문자열과 숫자 타입 외의 데이터 타입 크기를 명시적으로 규정하지 않는다
자바스크립트 엔진 제조사별로 상이할 수 있음

배정밀도 64비트 부동 소수점 형식의 숫자는 8 바이트로 표기한다

symbol table
컴파일러 또는 인터프리터는 심벌 테이블 이라고 부르는 자료구조를 통해 식별자를 키로 바인딩한
값의 메모리 주소, 데이터 타입, 스코프 등을 관리한다

데이터 타입에 의한 값의 해석

메모리에는 2진수 형식으로 저장되지만
꺼내어 쓸 때는 타입 별로 값에 대한 해석이 달라진다
0100 0001 을 숫자로 해석하면 65, 문자열로 해석하면 'A' 이다

데이터에 타입이 필요한 이유눈 다음과 같다

  • 저장할 메모리 공간의 크기를 결정하기 위해
  • 참조 시 한 번에 읽어들어야할 공간의 크기를 결정하기 위해
  • 메모리의 2진수를 어떻게 해석할지 결정하기 위해

9. 동적 타이핑

동적 타입 언어와 정적 타입 언어

자바스크립트의 모든 값은 데이터 타입을 갖는다
C와 자바 같은 정적 타입 언어는 변수 선언 시 할당할 수 있는 값의 종류를 함께 선언해야 한다
이를 명시적 타입 선언이라고 한다

정적 타입 언어는 변수의 타입을 변경할 수 없고
컴파일 시점에 타입 체크를 수행한다

자바스크립트는 동적 타입 언어로 변수 선언 시 타입을 선언하지 않는다
자바스크립트는 변수 선언이 아닌 할당에 의해 타입이 결정(추론) 된다
재할당에 의해 언제든지 변할 수 있다

동적 타입 언어와 변수

동적 타입 언어는 변수에 어떤 타입의 값이라도 자유롭게 할당할 수 있다
이는 편리함과 함께 위험도 존재한다
모든 것에는 트레이드 오프가 존재한다

변수 값은 언제든지 변경될 수 있기 때문에
복잡한 프로그램에서는 변화한느 변수 값을 추적하기 어려울 수 있다
또한 암묵적으로 타입이 변환되기도 하기 때문에 더더욱 어려울 수 있다
유연성은 높지만 신뢰성이 떨어진다

사람이 이해할 수 있는 가독성이 좋은 코드가 좋은 코드다
훌륭한 프로그래머는 사람이 이해할 수 있는 코드를 쓴다

profile
떠돌이 생활을 하는. 실업자는 아니지만, 부랑 생활을 하는

0개의 댓글