모던 자바스크립트 Deep Dive - 06장 데이터 타입

송히·2023년 10월 4일
0
post-thumbnail

06. 데이터 타입

자바스크립트(ES6)은 7개의 데이터 타입 제공 -> 각 타입은 같은 모양이라도 목적, 메모리 크기, 해석하는 방법 등 다름

6.1 숫자 타입

자바스크립트는 모든 수를 실수로 처리함 (표기는 정수여도 처리는 실수로 함 -> 정수끼리 나눠도 실수 나올 수 있음)

  • Infinity:양의무한대
  • -Infinity:음의무한대
  • NaN:산술연산불가not a number) -> 자바스크립트는 대소문자 구별 (틀리면 숫자가 아닌 식별자 처리)
    위 3가지 경우도 숫자로 구분함

6.2 문자열 타입

텍스트 데이터 표현에 사용 -> 유니코드(UTF-16)
문자열은 원시 타입 => 변경 불가능한 값 의미
“”(큰따옴표), ‘’(작은 따옴표), ``(백틱) 으로 감싸서 선언 -> 안 감싸면 키워드 / 식별자 같은 토큰으로 인식됨

6.3 템플릿 리터럴

ES6부터 도입된 새로운 문자열 표기법, ``(백틱) 사용 => 런타임에 일반 문자열로 변환 되어 처리됨
더 편리한 문자열 처리 기능 제공

6.3.1 멀티라인 문자열

일반 문자열에서 줄바꿈 등 공백이스케이프 시퀀스 사용해야함
하지만 템플릿 리터럴에서는 모든 공백이 있는 그대로 적용

6.3.2 표현식 삽입

문자열 연결+ 로 할 수 있음
하지만 템플릿 리터럴에서는 ${}으로 감싸서 사용 가능 -> 타입이 문자열로 강제 변환되어 삽입됨

6.4 불리언 타입

참(true), 거짓(false) -> 조건문에서 자주 사용

6.5 undefined 타입

자바스크립트에서 변수가 선언될 때, undefined으로 초기화됨(쓰레기값 대신)
-> 개발자가 의도적으로 변수에 값이 없음을 말하고 싶다면 null 사용 권장

6.6 null 타입

null의 사용법
1. 의도적으로 값이 없음을 명시할 때 사용 (대소문자 구분!) -> 이전에 참조하던 값을 더 이상 사용하지 않겠다는 의미
2. 함수가 유효한 값을 반환할 수 없는 경우, 에러 대신 null 반환

6.7 심벌 타입

ES6에서 추가된 원시 타입 값, 다른 값과 중복 되지 않는 유일한 값 -> 이름이 충돌할 위험 없는는 객체의 유일한 프로퍼티 키 만드는 목적으로 사용
Symbol 함수 호출을 해서 생성 -> 외부에 값 노출 X, 다른 값과 중복 X

var key = Symbol('key'); 
console.log(typeof key); // symbol

6.8 객체 타입

자바스크립트는 객체 타입 언어 -> 거의 모든 것이 객체임

6.9 데이터 타입의 필요성

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

자바스크립트 엔진은 데이터 타입에 따라 메모리 공간의 크기를 확보함
값을 참조할 때도 타입을 보고, 한번에 읽어들일 공간 크기를 확보함

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

메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해 필요함

6.10 동적 타이핑

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

정적 타입 언어는 변수의 타입을 변경할 수 없고, 변수에 선언한 타입에 맞는 값만 할당할 수 있음
동적 타입 언어는 값을 할당하는 시점에 변수의 타입이 동적으로 결정되고, 변수의 타입을 언제든지 자유롭게 변경할 수 있음 -> 선언이 아닌 할당에 의해 타입이 결정됨(타입 추론)

변수는 타입을 갖지 않지만, 값은 타입을 가짐 -> 변수에 할당된 값에 의해 변수의 타입이 결정되는 것

6.10.2 동적 타입 언어와 변수

변수의 타입을 자유롭게 바꾸는 것은 편리함을 주지만 위험성도 있음
따라서 다음과 같은 주의사항을 지켜야함

  • 변수는 꼭 필요한 경두뻬 한해 제한적으로 사용(많을 수록 오류 발생 가능성 높임)
  • 변수의 유효 범위(스코프)를 최대한 좁게 만들어 변수의 부작용 억제
  • 전역 변수 사용 지양(프로그램 복잡성 증가, 처리 흐름 추적 어려움, 오류 원인 특정 어려움)
  • 변수보다는 상수를 사용해 값의 변경을 억제
  • 변수 이름은 변수의 목적이나 의미를 파악할 수 있도록 네이밍하기
profile
데브코스 프론트엔드 5기

0개의 댓글