데이터 타입 = 값의 종류
* 자바스크립트의 데이터 타입 7개
(1) 원시 타입
- 숫자(number) 타입
- 문자열(string) 타입
- 불리언(boolean) 타입
- undefined 타입
- null 타입
- 심벌(symbol) 타입
(2) 객체 타입: 객체, 함수, 배열 등
6.1 숫자 타입
정수, 실수 구분 없이 하나의 숫자 타입만 존재
배정밀도 64비트 부동소수점 형식을 따름: 모든 수를 10진수 실수로 처리
3가지 특별한 값 존재: Infinity(양의 무한대), -Infinity(음의 무한대), NaN(not-a-number, 산술 연산 불가)
6.2 문자열 타입
UTF-16(16비트 유니코드 문자)의 집합으로 표현
작은따옴표(' '), 큰따옴표(" "), 백틱(` `)으로 감쌀 수 있음 → 일반적으로 작은따옴표 사용
키워드나 식별자 같은 토큰으로 인식하지 않고, 공백 문자를 포함할 수 있도록 따옴표로 감싸야 한다.
자바스크립트에서 문자열은 원시 타입으로 변경 불가능한 값이다.
6.3 템플릿 리터럴
ES6부터 도입된 새로운 문자열 표기법
멀티라인 문자열, 표현식 삽입, 테그드 템플릿 등 편리한 문자열 처리 기능을 제공
백틱(` `)을 사용해 표현 (ex. var template = `Template literal`;)
1. 멀티라인 문자열
일반 문자열 내에서는 줄바꿈 등의 공백 표현을 위해 이스케이프 시퀀스를 사용해야 한다.
그러나 템플릿 리터럴에서는 이스케이프 시퀀스를 사용하지 않고도 줄바꿈 등 모든 공백이 그대로 적용된다.
* 이스케이프 시퀀스(escape sequence):
\0: Null, \b: 백스페이스, \f: 폼피드, \n: 개행(Line Feed), \r: 개행(Carrige Return), \t: 탭(수평), \v: 탭(수직), \uXXXX: 유니코드
2. 표현식 삽입
일반 문자열은 문자열 연산자 +를 사용하여 문자열을 연결 → 피연산자 중 하나 이상이 문자열인 경우 동작
템플릿 리터럴 내에서는 표현식 삽입 ${}을 사용하여 표현식을 감쌈 → 표현식의 평가 결과가 문자열이 아니더라도 문자열로 타입 강제 변환 (ex. `1+2=${1+2}` 이면 1+2=3)
6.4 불리언 타입
true, false 값만 존재
6.5 undefined 타입
undefined 값만 유일하게 존재
var 키워드로 선언된 변수에 암묵적으로 할당되는 값
undefined: 변수에 값을 할당하여 변수의 실체를 명확히 하는 것
6.6 null 타입
null 값만 유일하게 존재
변수에 값이 없다는 것을 의도적으로 명시할 때 사용(intentional absence)
이전에 참조하던 값에 대한 참조를 명시적으로 제거 → 아무것도 참조하지 않는 메모리 공간에 대해 가비지 콜렉션 수행됨
함수가 유효한 값을 반환할 수 없는 경우 명시적으로 null을 반환하기도 한다.
6.7 심벌 타입
ES6에서 추가된 타입
다른 값과 중복되지 않는 변경 불가능한 원시 타입의 유일 값 → 주로 객체의 유일한 프로퍼티 키를 만들기 위해 사용
심벌 외의 원시 값이 리터럴을 통해 생성하는 것과 달리 Symbol 함수를 호출해 생성
생성된 심벌 값은 외부에 노출되지 않음 (ex. var key = Symbol('key');)
6.8 객체 타입
위 6가지 데이터 타입 이외의 모든 값 (11장에서 설명)
6.9 데이터 타입의 필요성
1. 데이터 타입에 의한 메모리 공간의 확보와 참조
메모리에 값을 저장하려면 확보해야 할 메모리 공간의 크기가 결정되어야 한다.
자바스크립트 엔진은 데이터 타입, 즉 값의 종류에 따라 정해진 크기의 메모리 공간을 확보한다.
값을 참조할 때에도 한 번에 읽어 들여야 할 메모리 공간의 크기를 데이터 타입으로 인식한다.
2. 데이터 타입에 의한 값의 해석
메모리에서 읽어 들인 2진수, 즉 비트의 나열을 어떻게 해석할지 데이터 타입에 따라 결정된다.
6.10 동적 타이핑
1. 동적 타입 언어와 정적 타입 언어
- 정적 타입 언어(static/strong type): 명시적 타입 선언, 컴파일 시점에 타입 체크 수행
→ 타입의 일관성을 강제하여 안정적인 코드 구현, 런타임 발생 에러를 감소시킴
(ex. C, C++, 자바, 코틀린, 고, 하스켈, 러스트, 스칼라 등)
- 동적 타입 언어(dynamic/weak type): 데이터 타입에 무관하게 값 할당 가능, 유연성은 높지만 신뢰성은 낮다.
→ 변화하는 값 추적의 어려움, 값 확인 전까지 변수 타입을 확신할 수 없음, 자바스크립트 엔진에 의해 암묵적으로 타입이 자동 변환되기도 함 → 오류 발생률 증가
∴ 변수 개수를 최소한으로 유지, 유효 범위(스코프) 최소화, 전역 변수 사용 자제, 변수보다 상수 사용, 변수의 목적이나 의미를 파악할 수 있도록 네이밍
(ex. 자바스크립트, 파이썬, PHP, 루비, 리스프, 펄 등)
자바스크립트는 동적 타입 언어
- 타입 추론: 자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정됨
- 동적 타이핑: 재할당에 의해 변수의 타입이 언제든지 동적으로 변할 수 있음
변수는 타입을 갖지 않고, 값은 타입을 갖는다 → 현재 변수에 할당된 값에 따라 변수 타입이 동적으로 결정되는 것.
'Study > JavaScript' 카테고리의 다른 글
[모던 자바스크립트 Deep Dive] 5장 표현식과 문 (1) | 2025.03.16 |
---|---|
[모던 자바스크립트 Deep Dive] 4장 변수 (1) | 2025.03.16 |
[모던 자바스크립트 Deep Dive] 3장 자바스크립트 개발 환경과 실행 방법 (1) | 2025.03.15 |
[모던 자바스크립트 Deep Dive] 2장 자바스크립트란? (4) | 2025.03.14 |
[모던 자바스크립트 Deep Dive] 1장 프로그래밍 (1) | 2025.03.13 |