반응형
자바스크립트 데이터 타입 7가지
- 원시타입
- 숫자 타입
- 문자열 타입
- 불리언 타입
- undefined 타입: var 키워드로 선언된 변수에 암묵적으로 할당되는 값
- null 타입: 값이 없다는 것을 의도적으로 명시할 때 사용하는 값
- 심벌 타입: ES6에서 추가된 7번째 타입
- 객체 타입: 객체, 함수, 배열 등
6.1. 숫자타입
- C언어나 자바와 달리 자바스크립트는 하나의 숫자 타입만 존재한다.
- 숫자 타입의 값은 64비트 부동소수점 형식을 따르며, 모든 수를 실수로 처리한다. 👉 정수끼리 나눠도 실수값이 나올 수 있다.
- 자바스크립트는 2진수, 8진수, 16진수를 표현하기 위한 데이터 타입을 제공하지 않기 때문에 이들 값을 참조할 시 모두 10진수로 해석된다.
- 추가적으로 세 가지 특별한 값도 표현가능하다.
- Infinity: 양의 무한대 (10/0)
- -Infinity: 음의 무한대 (10/-0)
- NaN: 산술 연산 불가(not a number) (1*'String')
6.2. 문자열 타입
- 0개 이상의 16비트 유니코드 문자의 집합
- 자바스크립트의 문자열은 원시 타입이며, 변경 불가능한 값(immutable value)이다. 👉 문자열이 생성되면 그 문자열을 변경할 수 없다는 것을 의미한다.
6.3. 템플릿 리터럴
- ES6부터 도입된 새로운 문자열 표기법
- 런타임에 일반 문자열로 변환되어 처리된다.
- 백틱(``)을 사용해 표현한다.
6.3.1. 멀티라인 문자열
일반 문자열 내에서는 줄바꿈(개행)이 허용되지 않는다. 👉 일반 문자열 내에서 줄바꿈 등 공백을 표현하려면 백슬래시로 시작하는 이스케이프 시퀀스(\0, \b, \r,...)를 사용해야 한다.
//에러
var str = 'Hello
world.';
일반 문자열과 달리 템플릿 리터럴 내에서는 이스케이프 시퀀스를 사용하지 않고도 줄바꿈이 허용되며, 모든 공백도 있는 그대로 적용된다.
var t = `<ul>
<li><a href="#>Home</a></li>
</ul>
`;
console.log(t);
//출력 결과는 아래와 같다.
<ul>
<li><a href="#>Home</a></li>
</ul>
6.3.2. 표현식 삽입
문자열은 문자열 연산자 +를 사용해 연결할 수 있다. 피연산자 중 하나 이상이 문자열인 경우 +는 문자열 연결 연산자로 동작한다. 그외의 경우는 덧셈 연산자로 동작한다.
템플릿 리터럴 내에서는 표현식 삽입을 통해 문자열 연산자보다 가독성 좋고 간편하게 문자열을 조합할 수 있다.
var first = "jane";
var last = "lee";
//es6 표현식 삽입
console.log(`My name is ${first} ${last}.`);
// 출력 결과
My name is jane lee.
6.4. 불리언 타입
true /false
6.5. undefined 타입
- undefined 타입 값은 undefined가 유일하다.
- undefined는 개발자가 의도적으로 할당하는 값이 아니라 js 엔진이 변수를 초기화할 때 사용하는 값이다. 변수 참조 시 undefined가 반환된다면 참조한 변수가 선언 이후 값이 할당된 적이 없는(=초기화되지 않은) 변수라는 것을 알 수 있다.
- 개발자가 의도적으로 변수에 undefined를 할당하는 것은 피해야 한다. 👉 변수에 값이 없다는 것을 명시하려면 null 할당한다.
6.6. null 타입
- null 타입 값은 null이 유일하다.
- 변수에 값이 없다는 것을 의도적으로 명시(=의도적 부재)할 때 사용한다.
- 변수가 이전에 참조하던 값을 더 이상 참조하지 않겠다는 의미이다. 이는 이전에 할당되어 있던 값에 대한 참조를 명시적으로 제거하는 것을 의미하며, js 엔진은 이 메모리 공간에 대한 가비지 콜렉션을 수행한다.
- 함수가 유효한 값을 반환할 수 없는 경우 명시적으로 null을 반환하기도 한다.
6.7. 심벌 타입
- es6에서 추가된 7번째 타입
- 변경 불가능한 원시 타입의 값
- 다른 값과 중복되지 않는 유일무이한 값으로, 이름이 충돌할 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용한다.
- 심벌 이외의 원시값은 리터럴을 통해 생성하지만, 심벌은 symbol 함수를 호출해 생성한다. 이때 생성된 심벌값은 외부에 노출되지 않는다.
//심벌 값 생성
var key = symbol("key");
console.log(typeof key); //symbol
//객체 생성
var obj = {};
//이름이 충돌할 위험이 없는 유일무이한 값인 심벌을 프로퍼티 키로 사용
obj[key] = "value";
console.log(obj[key]); //value
6.9. 데이터 타입의 필요성
6.9.1. 데이터 타입에 의한 메모리 공간의 확보와 참조
- 변수에 할당되는 값의 데이터 타입에 따라 확보해야 할 메모리 공간의 크기가 결정된다. 👉 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
- 값을 참조할 때도 마찬가지로, 한 번에 읽어 들여야 할 메모리 공간의 크기, 즉 메모리 셀의 개수(바이트 수)를 알아야 한다. 👉 값을 참조할 때 한 번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해
6.9.2. 데이터 타입에 의한 값의 해석
메모리에서 읽어들인 2진수 데이터를 명시된 데이터 타입에 따라 해석한다. 👉 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해
6.10. 동적 타이핑
6.10.1. 동적 타입 언어와 정적 타입 언어
👾 정적 타입 언어
- C, 자바, 코틀린, 고, 하스켈, 러스트, 스칼라,...
- 변수 선언 시 변수에 할당할 수 있는 값의 종류(데이터 타입)를 사전에 선언해야 함. => 이를 명시적 타입 선언이라고 함 `char a = 'a';`
- 변수의 타입을 변경할 수 없으며, 변수에 선언한 타입에 맞는 값만 할당 가능
- 컴파일 시점에 타입 체크를 수행하고, 타입 체크를 통과하지 못할 시 에러가 발생하며 프로그램 자체가 실행되지 않는다.
👾 동적 타입 언어
- 자바스크립트, 파이썬, 루비, 리스프,...
- 변수 선언 시 타입을 선언하지 않는다.(var, let, const 키워드를 사용해 변수 선언)
- 값을 할당하는 시점에 변수의 타입이 동적으로 결정되고 변수의 타입을 언제든지 자유롭게 변경할 수 있다.
- 동적 타이핑: 선언이 아닌 할당에 의해 변수 타입이 결정(=타입추론)되며, 언제든지 재할당에 의해 타입이 동적으로 변할 수 있다는 자바스크립트의 특징.
6.10.2. 동적 타입 언어와 변수
동적 타입 언어의 경우, 변수에 어떤 데이터 타입의 값이라도 자유롭게 할당할 수 있다는 점에서 편리하기는 하지만, 반대로 단점도 존재한다.
- 변수 타입이 언제든 변경될 수 있으므로, 변화하는 변수 타입을 추적하기 어려울 수 있다. 👉 유연성은 높지만 신뢰성은 떨어진다.
🚫변수 사용시 주의할 점🚫
- 변수는 꼭 필요한 경우에만 제한적으로 사용
- 변수의 유효 범위(스코프)를 최대한 좁게 만들어 변수의 부작용 억제
- 전역 변수는 최대한 사용하지 않도록 한다.
- 변수보다는 상수 사용
- 변수 이름은 변수의 목적이나 의미를 파악할 수 있도록 네이밍한다.
출처: 모던 자바스크립트 Deep Dive (이웅모 저, 위키북스)
반응형
'웹 프로그래밍 > JavaScript | TypeScript' 카테고리의 다른 글
[모던 자바스크립트 Deep Dive] 9장. 타입 변환과 단축 평가1 (타입 변환) (1) | 2024.03.22 |
---|---|
[모던 자바스크립트 Deep Dive] 8장. 제어문 (1) | 2024.03.22 |
[모던 자바스크립트 Deep Dive] 7장. 연산자 (0) | 2024.03.21 |
[모던 자바스크립트 Deep Dive] 5장. 표현식과 문 (0) | 2024.03.20 |
리액트 공식문서 읽기 - 주요개념(Lifecycle) (0) | 2024.03.18 |
[땅콩코딩] 타입스크립트 강좌 내용정리(함수의 타이핑, 선택적 매개 변수와 기본 매개변수 / 클래스와 오브젝트 ) (0) | 2024.03.14 |