[240115] 6장 데이터 타입

6장 데이터 타입

자바스크립트의 모든 값은 데이터 타입을 갖는다.

원시타입

  • 숫자 타입
  • 문자열 타입
  • 불리언 타입
  • undefined 타입
  • null 타입
  • 심벌(symbol) 타입 (ES6에서 추가된 7번째 타입)

객체 타입

  • 객체 함수 배열 등

숫자 타입

  • ECMAScript 사양에 따르면 숫자 타입의 값은 배정밀도 64비트 부동소수점 형식을 따른다.
  • 즉 모든 수를 실수로 처리, 정수만 표현하기 위한 데이터 타입은 별도로 없다.
  • Infinity : 양의 무한대
  • -Infinity : 음의 무한대
  • NaN : 산술 연산 불가 (not-a-number)

문자열

string = '작은따옴표로 감싼 문자열 내의 "큰따옴표"는 문자열로 인식된다.'
  • C는 문자열 타입을 제공하지 않고 문자의 배열로 문자열을 표현하고, 자바는 문자열을 객체로 표현
  • JS는 문자열은 원시 타입이며 변경 불가능한 값이다.
  • 이것은 문자열이 생성되면 문자열을 변경할 수 없다는 의미이다. 추후 11.1.2절 “문자열과 불변성”에서 더 자세히 볼 듯

템플릿 리터럴

  • ES6 부터 새로운 문자열 표기법 도입
  • 멀티라인 문자열, 표현식 삽입, 태그드 템플릿 등 편리한 문자열 처리 기능 제공
  • ` 백틱 사용
  • 줄바꿈 허용, 공백 그대로 적용
;`My name is ${first} ${last}.`
  • 표현식 삽입은 반드시 템플릿 리터럴에서 사용할 것

  • 일반 문자열에서는 어떻게 표현?
  • \0 Null
  • \b 백스페이스
  • \n 개행 등등등
  • \’ , \’’ , \v \t 등등등

불리언 타입

  • true , false

undefined 타입

  • undefined 타입이 유일하다.
  • 개발자가 의도적으로 할당하기 위한 값이 아니라 자바스크립트 엔진이 변수를 초기화 할 때 사용하는 값이다.
  • 의도적으로 undefined 할당하면 취지와 어긋남

null 타입

  • null , Null NULL 다 다르다.
  • null 타입의 값은 null 이 유일하다.
  • 변수에 값이 없다는 것을 의도적으로 명시
  • 변수에 null을 할당하는 것은 변수가 이전에 참조하던 값을 더 이상 참조하지 않겠다는 의미

심벌 타입

  • 변경 불가능한 원시 타입의 값
  • 다른 값과 중복되지 않는 유일무이한 값
  • 이름이 충돌할 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용
  • 심벌 이외의 원시 값은 리터럴을 통해 생성하지만 심벌은 symbol 함수를 호출해 생성한다.
  • 생성된 심벌 값은 외부에 노출되지 않으며, 다른 값과 절대 중복되지 않는 유일무이한 값이다.
var key = Symbol("key")
console.log(typeof key)

var obj = {}

obj[key] = "value"
console.log(obj[key])
  • 33장에서 더 자세히 살펴봄

객체 타입

  • 11장에서 더 자세히 살펴봄
  • 중요한 것은 자바스크립트는 객체 기반의 언어이며, 자바스크립트를 이루고 있는 모든 것이 객체이다.

데이터 타입의 필요성

  • 메모리 공간의 확보해야하는 메모리 공간의 크기를 결정하기 위해
    • 8바이트 읽어라는걸 알 수 있기 때문
  • 값을 참조할 때 한 번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해
  • 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해

심벌 테이블

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

동적 타이핑

  • 변수는 데이터 타입을 가질까? : 변수는 타입을 갖지 않는다. 값은 타입을 갖는다. 따라서 현재 할당되어 있는 값에 의해 변수의 타입이 동적으로 결정됨, 변수는 값이 묶여있는 값에 대한 별명
  • C나 자바같은 정적 타입 언어는 변수를 선언할 때 변수에 할당할 수 있는 값의 종류, 즉 데이터 타입을 사전에 선언해야한다. 이를 명시적 타입 선언이라 한다.
  • 대표적인 정적 타입 언어로 c, c++, 자바, 코틀린, 고, 하스켈, 러스트, 스칼라 등이 있다.
  • 자바스트립트의 변수는 선언이 아닌 할당에 의해 타입이 결정 (타입 추론)된다.
  • 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다. → 동적 타이핑이라 부름
  • 자바 스크립트는 동적타입언어, 파이썬 PHP 루비 리스프 펄 등이 있다.

동적 타입 언어의 변수는 편할 수는 있지만 언제든지 변경될 수 있기 때문에 복잡한 프로그램에서는 변화하는 변수의 값이 추적되기 어려울 수 있다. 타입도 변경될 수 있고 타입 체크할 순 있는데 번거롭고 코드의 양도 증가한다.

  • 변수는 꼭 필요한 경우에 한해 제한적으로 사용
  • 변수의 유효 범위(스코프)는 최대한 좁게 만들어 변수의 부작용 억제
  • 전역 변수는 최대한 사용하지 않는다.
  • 변수보다는 상수를 사용해 값의 변경을 억제 (const)
  • 변수 이름은 변수 목적이나 의미를 파악할 수 있도록 네이밍한다.

Categories:

Updated:

Leave a comment