728x90
반응형
📌 목차
- 데이터 타입
- 원시 타입
- 객체 타입
- 데이터 타입의 필요성
- 동적 타이핑
💡 데이터 타입
데이터 타입이란 값의 종류를 의미하며 자바스크립트의 모든 값은 데이터 타입을 갖는다.
💡 원시 타입
구분 | 데이터 타입 | 설명 |
원시 타입 | 숫자 타입 | 숫자, 정수, 실수 구분없이 하나의 숫자 타입만 존재 |
문자열 타입 | 문자열 | |
불리언 타입 | True, False | |
undefined 타입 | var 키워드로 선언된 변수에 암묵적으로 할당되는 값 | |
null 타입 | 값이 없다는 것을 의도적으로 명시할 때 사용하는 값 | |
심벌 타입 | ES6에서 추가된 7번째 타입 | |
객체타입 | 객체, 함수, 배열 |
숫자 타입
- 모든 수를 실수로 처리하며, 정수만 표현하기 위한 데이터 타입이 별도로 존재하지 않는다.
- 정수로 표시된다 해도 사실은 실수이다.
문자열 타입
- 텍스트 데이터를 나타내는 데 사용한다.
- ' ', " ", ` ` 기호로 텍스트를 감싼다.
- 변경 불가능한 값(immutable value)이다. 문자열이 생성되면 변경할 수 없다.
템플릿 리터럴
- 템플릿 리터럴은 멀티라인 문자열(multi-line string), 표현식 삽입(expression interpolation), 태그드 템플릿(tagged template) 등 편리한 문자열 처리 기능을 제공한다.
- ` ` 백틱을 사용한다.
불리언 타입
- 논리적 참, 거짓을 나타내는 true와 false (조건문에서 자주 사용)
undefined 타입
- var 키워드로 선언한 변수는 암묵적으로 undefined로 초기화한다.
- 변수를 선언한 이후 값을 할당하지 않은 변수를 참조하면 undefined를 반환한다.
- undefined를 개발자가 할당하는 것은 취지에 어긋나며, 혼란을 줄 수 있으므로 권장하지 않는다.
- 변수에 값이 없다는 것을 명시하고 싶을 경우에는 null을 할당한다.
null 타입
- 변수에 값이 없다는 것을 의도적으로 명시할 때 사용한다.
- null을 할당하는 것은 변수가 이전에 참조하던 값을 더 이상 참조하지 않겠다는 것을 의미한다.
- 자바스크립트 엔진은 더이상 참조하지 않는 메모리 공간에 대해 가비지 콜렉션을 수행할 것이다.
심벌 타입
- Symbol 함수를 호출해 생성한다.
- 생성된 심벌 값은 값은 외부에 노출되지 않는다.
- 다른 값과 중복 되지 않는 유일무이한 값이다.
- 주로 이름이 충돌할 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용한다.
💡 객체 타입
자바스크립트는 객체 기반의 언어이며, 자바스크립트를 이루고 있는 거의 모든 것은 객체이다.
자세한 내용은 후(11장 원시 값과 객체의 비교)에 다룰 예정이다.
💡 데이터 타입의 필요성
데이터 타입에 의한 메모리 공간의 확보와 참조
var score = 100;
- 자바스크립트 엔진은 값의 종류(데이터 타입)에 따라 정해진 크기의 메모리 공간의 크기가 결정된다.
- 위 예제는 100을 숫자 타입으로 판단하고 8바이트의 메모리 공간을 확보한다.
- 값을 참조하려면 메모리 공간의 크기(메모리 셀의 개수/바이트 수)를 알아야한다.
- 자바스크립트 엔진은 score의 변수에 숫자 타입의 값이 할당되어 있느니 숫자 타입으로 인식하고 score 변수를 참조하면 8바이트 단위로 메모리 공간에 저장된 값을 읽어 들인다.
데이터 타입에 의한 값의 해석
- 메모리에서 읽어 들인 2진수를 어떻게 해석할까?
- 예를 들어 메모리에 저장된 값 0100 0001을 숫자로 해석하면 65지만 문자열로 해석하면 ‘A’이다. 이렇듯 해석이 다를 수 있다.
- score의 변수에 할당된 값은 숫자 타입의 값이므로 score 변수를 참조하면 메모리 공간의 주소에서 읽어 들인 2진수를 숫자로 해석한다.
💡 동적 타이핑
동적 타이핑(dynamic typing)
- 자바스크립트에서는 값을 할당하는 시점에 변수의 타입이 동적으로 결정되고 변수의 타입을 언제든지 자유롭게 변경할 수 있다.
- 할당에 의한 타입 결정(타입 추론(type inference))과 재할당에 의해 변수의 타입 변경이 가능하다.
- 이런 특징을 동적타이핑이라고 한다.
동적 타입 언어와 정적 타입 언어
정적 타입 언어
- 변수를 선언할 때 변수에 할당할 수 있는 값의 종류, 즉 데이터 타입을 사전에 선언해야 한다. 예) int number;
- 이를 명시적 타입 선언이라 한다.
- 변수 선언 시점에 변수 타입이 결정되고 변수의 타입을 변경할 수 없으며, 변수에 선언한 타입에 맞는 값만 할당할 수 있다.
- 컴파일 시점에 타입 체크(데이터 타입에 알맞은 값을 할당했는지 검사)를 수행한다.
- 타입 체크를 통과하지 못하면 에러를 발생시키고 프로그램 실행을 막는다.
- 이를 통해 타입을 강제함으로써 안정적인 코드의 구현할 수 있으며, 런타임 에러를 줄일 수 있다.
- 정적 타입 언어로는 C, C++, JAVA, Kotlin, Go, Rust, Scala 등이 있다.
동적 타입 언어 :
- 변수를 선언할 때 타입을 선언하지 않는다.
- 키워드를 사용해 변수를 선언한다. (var, let, const)
- 미리 선언한 데이터 타입의 값 뿐만 아니라 어떠한 데이터 타입의 값이라도 자유롭게 할당할 수 있다.
- 변수는 기본적으로 타입을 갖지 않지만 값은 타입을 갖는다. 따라서 현재 변수에 할당되어 있는 값에 의해 변수의 타입이 동적으로 결정된다.
- 동적 타입 언어로는 Javascript, Python, PHP, Ruby 등이 있다.
728x90
반응형
'Study > JavaScript' 카테고리의 다른 글
모던 자바스크립트 Deep Dive - 8장 제어문 (1) | 2023.06.16 |
---|---|
모던 자바스크립트 Deep Dive - 7장 연산자 (0) | 2023.06.09 |
모던 자바스크립트 Deep Dive - 5장 표현식과 문 (0) | 2023.05.18 |
모던 자바스크립트 Deep Dive - 4장 변수 (0) | 2023.05.11 |
[JavaScript]디바운싱과 쓰로틀링이란? (0) | 2022.06.22 |