[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)
- 변수 이름은 변수 목적이나 의미를 파악할 수 있도록 네이밍한다.
Leave a comment