자바스크립트의 데이터 타입(data type)
데이터타입
- 값의 종류
- 모든 값은 데이터 타입을 갖는다.
구분 | 데이터 타입 | 설명 | 특이 사항 |
원시타입 (primitive type) |
숫자(number) | 숫자 - 정수, 실수 구분 없음 (모두 실수로 처리) - ±Infinity, NaN 포함 |
숫자 타입 값은 배정밀도 64비트 부동소수점 형식을 따르는 2진수로 저장된다. |
문자열(string) | 문자열 - 16비트 유니코드 문자(UTF-16)의 집합으로 표현 - '', "", ``으로 감싸야 함(토큰과 구분하기 위함) - 변경 불가능함 |
템플릿 리터럴 표기법 도입 - 백틱으로 표현 - 멀티라인 문자열(이스케이프 시퀀스 사용하지 않아도 됨), 표현식 삽입(표현식을 ${}으로 감쌈, 표현식 평가결과는 문자열로 타입변환됨), 태그드 템플릿 기능 도입 |
|
불리언(boolean) | true / false (논리) | 조건문에서 주로 사용 | |
undefined | var 키워드로 선언된 변수에 암묵적으로 할당되는 값 | ||
null | 값이 없음을 의도적으로 명시 - 이전 참조를 명시적으로 제거 |
||
심벌(symbol) | - 다른 값과 중복되지 않음 - Symbol 함수를 호출해서 생성함 |
ES6에서 추가됨 | |
*BigInt | (2^53) - 1 보다 큰 정수, | ES11에서 추가됨 | |
객체타입 (Object / reference type) | 객체, 함수, 배열 등 |
* undefined와 null
- undefined: 자바스크립트 엔진이 초기화할 때 사용하는 값으로, 변수 선언 후 값이 할당되지 않은 변수라는 것을 알수 있게 해준다.
따라서 변수에 값이 없다는 것을 명시하기 위해서는 null 을 할당하는 것을 권장한다.
데이터 타입의 필요성
1) 값 저장시 메모리 공간 확보 크기 결정
- 낭비와 손실을 없이 값 저장 필요
2) 값을 참조할 때 한 번에 읽어 들여야 할 메모리 공간의 크기를 결정
- 값 훼손을 막기 위함
3) 메모리에서 읽어들인 2진수를 해석 방식 결정
- 값은 2진수로 저장되기 때문에 타입에 따라 다르게 해석한다.
동적 타이핑
정적 타입 언어 | 동적 타입 언어 | |
언어 | C, C++, Java, Kotlin, Go, 등 | JavaScript, Python, PHP, Ruby, 등 |
특징 | 명시적 타입 선언(변수 선언시 타입을 사전에 선언함) - 타입 변경 불가 - 타입에 맞는 값만 할당 가능 - 타입 일관성 강제 - 안정적인 코드 구현 - 런타임 에러 감소 |
할당에 의해 타입이 결정됨(타입 추론, type interface) - 변수 선언시 타입 선언 하지 않음 - 타입 상관없이 할당 가능 - 값을 할당하는 시점에 변수 타입이 동적으로 결정됨 - 타입 변경 가능 >> 동적 타이핑(할당에 의한 타입 결정, 타입의 동적 변화 가능) |
동적 타입 언어의 단점
- 변화하는 변수 값 추적의 어려움
- 값을 확인하기 전에 타입 확신 어려움
- 자바스크립트 엔진에 의해 암묵적인 형변환 발생하여 예측이 어려움
- 오류 발생 가능성 높음 (유연성은 높으나 신뢰성이 떨어짐)
변수 사용시 주의사항
- 제한적 사용 필요 (무분별한 남용 금지)
- 스코프 좁게 만들기
- 전역 변수 사용 지양
- 상수 사용
- 목적이나 의미를 파악할 수 있는 네이밍 필요
References...
1) 모던 자바스크립트 Deep Dive, 이웅모, 위키북스
'JavaScript > 모던자바스크립트 Deep Dive 스터디' 카테고리의 다른 글
[모던JS DeepDive] 7장 연산자 (0) | 2023.01.03 |
---|---|
[모던JS DeepDive] 5장 표현식과 문 (0) | 2023.01.03 |
[모던JS DeepDive] 4장 변수 (0) | 2023.01.03 |
[모던JS DeepDive] 2장 자바스크립트란? (2) | 2023.01.02 |
[모던JS DeepDive] 1장 프로그래밍 (0) | 2023.01.02 |
댓글