데이터타입
💡 데이터 타입 = 값의 종류
자바스크립트의 모든 값은 데이터타입을 가지고 있으며, 총 7개의 데이터 타입을 가지고 있다.
원시타입
number
- 숫자 타입
- 모든 수를 실수로 처리하며, 정수만 표현하기 위한 데이터타입이 별도로 존재하지 않음. 그러므로, 정수로 표시한다해도 실수로 처리됨.
( C나 자바는 정수와 실수를 구분해서 타입제공. )
- 2진수, 8진수, 16진수를 표현하기 위한 데이터타입을 제공하지 않기 때문에 모두 10진수로 해석된다.
- 특별한 값을 표현할 수 있다.
- Infinity : 양의 무한대
- -Infinity : 음의 무한대
- NaN(Not a Number) : 산술연산 불가 ( 대소문자 구별하기. 값이 아닌 식별자로 해석되기 때문 )
string
-
문자열 타입
-
작은따옴표(’’), 큰따옴표(””), 백틱(``)으로 텍스트를 감싸며, 일반적으로 작은 따옴표를 사용.
-
문자열을 따옴표로 감싸는 이유는 키워드나 식별자같은 토큰과 구분하기 위해서. ( 안 감싸면 토큰으로 인식함. )
-
문자열이 생성되면 그 문자열을 변경할 수 없다 (원시타입이며 변경불가능한 값이라.)
-
템플릿리터럴
- ES6부터 도입된 새로운 문자열 표기법.
템플릿 리터럴은 멀티라인 문자열, 표현식 삽입, 태그드 템플릿 등 편리한 문자열 처리기능을 제공.
- 멀티라인 문자열 : 일반 문자열 내에서는 줄바꿈이 허용되지 않아 줄바꿈 등의 공백을 표현하려면 이스케이프 시퀀스를 사용해야하지만, 템플릿 리터럴 내에서는 이스케이프 시퀀스를 사용하지 않고도 줄바꿈이 허용되며, 모든 공백도 적용된다.
- 표현식삽입 : 문자열은 문자열 연산자 ‘+’ 를 이용해 연결하는데, 템플릿 리터럴에서는 표현식을
${}
로 감싸서 표현할 수 있다.
- 태그드 템플릿 : 함수에 템플릿 리터럴을 전달하는 방법.
호출된 함수는 템플릿 리터널 내 문자열 조각이나 표현식 등을 매개변수로 받는다. styled-components에서 사용되는 방식도 태그드 템플릿이다. ( 참고 : https://choonse.com/tag/태그드-템플릿/ ) const name = '라이언';
const city = '서울';
const showString = (text, ...args) => {
console.log(text);
console.log(args);
console.log(text[2]);
console.log(args[1]);
}
showString`나는 ${name}이고, ${city}에 살아요.`;
boolean
: 논리적 참,거짓을 나타내는 true / false
undefined
- 정의되지 않은 값. ( 변수에 값을 할당하여 변수의 실체를 명확히 하지 않은 값 )
- 자바스크립트 엔진이 변수를 초기화할 때 사용하는 값.
변수선언에 의해 확보된 메모리 공간을 처음 할당이 이뤄질 때까지 빈상태로 내버려두지 않고, 자바스크립트가 undefined로 초기화한다.
- var 키워드로 선언한 변수는 암묵적으로 undefined로 초기화 된다. → var키워드로 선언된 변수에 암묵적으로 할당되는 값.
- 변수를 선언한 이후 값을 할당하지 않은 변수를 참조하면 undefined가 반환된다.
null
- 값이 없다는 것을 의도적으로 명시할 때 사용하는 값
- 변수에 null 을 할당한다 = 변수가 이전에 참조하던 값을 더 이상 참조하지 않겠다. =이전에 할당되어 있던 값에 대한 참조를 명시적으로 제거하는 것을 의미. = 자바스크립트 엔진은 참조하지 않는 이 메모리공간에 가비지콜렉션을 수행.
- 함수가 유효한 값을 반환할 수 없는 경우에도 명시적으로 null을 반환한다.
symbol
객체타입
- 앞의 6가지 데이터타입을 제외한 객체, 함수, 배열 모두 객체타입.
- 자바스크립트는 객체기반의 언어이며, 자바스크립트를 이루고 있는 거의 모든 것이 객체이다.
데이터타입의 필요성
- 값을 저장할 때 확보해야하는 메모리 공간의 크기를 결정하기 위해
- 값을 참조할 때 한번에 읽어들여야 할 메모리 공간의 크기를 결정하기 위해
- 메모리에서 읽어들인 2진수를 어떻게 해석할지 결정하기 위해
동적타이핑
정적타입언어 ( ex. C, C++, 자바 등...)
- 변수 선언시점에 변수의 타입이 결정되고 변수의 타입을 변경할 수 없으며, 선언한 타입에 맞는 값만 할당할 수 있다.
- 컴파일 시점에 타입체크를 수행 ⇒ 통과하지 못하면 error를 발생시킴.
- 타입의 일관성을 강제함으로써 안정적인 코드를 구현할 수 있으며, 이는 런타임에서 발생하는 에러를 줄인다.
동적타입언어 ( ex. 자바스크립트, 파이썬, PHP 등.. )
- 타입을 선언하지 않으며, 어떠한 데이터 타입의 값이라도 자유롭게 할당할 수 있다.
- 선언이 아닌 할당에 의해 타입이 결정( 타입추론 )된다. 그리고 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있는 이 특징을 동적타이핑(dynamic typing)이라고 한다.
- 자바스크립트와 같이 이런 특징을 가진 언어를 정적타입과 구별하기 위해 동적타입언어라고 한다.
- 장단점
- 장점 : 동적타입의 언어는 어떤 데이터 타입의 값이라도 자유롭게 할당할 수 있어 유연성이 높아 편리하다.
- 단점 : 동적타입언어의 변수는 변수값이 언제든지 변경될 수 있고, 값의 변경에 의해 타입도 언제든지 변경될 수 있으므로 값을 확인하기 전에는 타입을 확신할 수 없어 신뢰성이 떨어진다.
위 내용을 토대로 면접으로 나올수 있는 질문
- 자바스크립트의 number 타입은 다른 언어와 차이점이 무엇인가?
- undefined와 null의 차이점
- 데이터 타입이 필요한 이유
- 정적타입언어 vs 동적타입언어
- 동적타입언어의 단점