데이터타입
데이터타입은 값을 종류를 말한다.
자바스크립트(ES6)는 7개의 데이터타입을 제공한다.
원시타입 | 문자열타입 |
불리언타입 | |
undefined 타입 | |
null 타입 | |
심벌 타입 | |
객체 타입 | 객체, 함수, 배열 등 |
1 과 ‘1’은 값을 생성한 목적과 용도도 다르다.
메모리공간, 크기도다르고 메모리에 저장되는 2진수도 다르고, 해석하는방식도 다르다.
데이터 타입의 특징을 알아보자.
6-1 숫자타입
java의 경우 숫자를 표현하려면 int long float double 등 다양한 숫자타입을제공하는 반면
javascript는 하나의 숫자 타입만 존재한다.
숫자타입은 모든수를 실수로 처리한다.
console.log (1 === 1.0) // true
6-2 문자열 타입
자바스크립트 문자열은 원시 타입, 변경 불가능한 값이다.
즉 문자열이 생성되면 그 문자열을 변경할 수 없다는 것을 의미한다.
또한 따옴표로 감싸지않으면 자바스크립트 엔진은 키워드나 식별자 같은 토큰으로 인식한다.
var string = hello; // refenrenceError : hello is not defined
6-3 템플릿 리터럴
ES6부터 템플릿 리터럴이라하는 새로운 문자열 표기업이다.
따옴표대신 백틱을 사용해 표현한다.
- 멀티라인 문자열
일반 문자열에서 줄바꿈등의 공백을 표현하려면 백슬래시로 시작하는 이스케이프 시퀀스를 사용해야한다.
[일반]
var template = '<ul>\\n\\t<li><a href="#">Home</a></li>\\n<ul>';
[템플릿리터럴]
var template = `<ul>
<li><a href="#">Home</a></li>
</ul>
`;
- 표현식 삽입
[일반]
var first = 'hello';
var last = 'js';
console.log('today study is' +first+ ' ' + last + '.'); // today study is hello js.
[템플릿리터럴]
var first = 'hello';
var last = 'js';
console.log('today study is ${first} ${last}.`); // 위와같음
6-4 불리언 타입
불리언타입은 true와 false뿐이다.
6-5 undefined 타입
undefined값은 변수 선언에의해 메모리공간에 값이 빈상태일때 자바스크립트엔진이 garbage값에 undefined로 초기화하는것이다.
만약에 개발자가 값이 없다고 명시하고싶을때는 null값으로 할당하는것이 좋다.
6-6 null 타입
null값은 변수에 값이 없다는것을 의도적으로 표현할때 사용한다.
var foo = 'Lee';
foo = null;
// 전에할당되있는 Lee값에대한 값을 더이상 참조하지않는다. 가비지콜렉션을 수행한다.
또한 함수가 유효한 값을 반환할 수 없는 경우 명시적으로 null을 반환하기도한다.
<script>
var element = document.querySelector('.myClass');
console.log(element); // null
</script>
6-7 심벌 타입
심벌은 ES6에서 추가된 7번째 타입으로 변경 불가능한 원시 타입의 값이다.
주로 충돌할 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용한다.
6-8 객체 타입
원시타입과 객체타입으로 나눠지는 걸로보아 근본적으로 다르다는의미이다.
중요한 것을 자바스크립트는 객체 기반의 언어이며, 자바스크립트를 이루고있는 거의 모든 것이 객체라는 것이다.
6-9 데이터 타입의 필요성
- 값을 저장할때 확보해야하는 메모리공간 크기 결정
- 값을 참조할때 한번에 읽어들여야할 메모리 공간 크기 결정
- 메모리에서 읽어들인 2진수를 어떻게 해석할지 결정
이 세가지이유로 데이터 타입이 필요하다.
6-10 동적 타이핑
자바같은 정적타입언어는 데이터타입을 사전에 선언해야한다.
정적 타입언어는 변수의 타입을 변경할수없고, 변수에 선언한 타입에맞는 값만 할당가능하다.
char c; // java의 정적타입언어
int num; // java의 정적타입언어
//--> javascript 동적타입언어
var foo;
console.log(typeof foo); // undefined
foo=3;
console.log(typeof foo);// number
foo = 'hello';
console.log(typeof foo); // string
foo = true;
console.log(typeof foo); // boolean
foo = null;
console.log(typeof foo); // object
foo = Symbol();
console.log(typeof foo); // symbol
foo = {};
console.log(typeof foo); // object
foo = [];
console.log(typeof foo); // object
foo = function () {};
console.log(typeof foo); // function
자바스크립트 동적타입언어는 어떠한 데이터 타입의 값이라도 자유롭게 할당할 수 있다.
즉 할당에의해 타입이 추론된다고 볼수있다. 재할당에의해 타입도 동적으로 변할수있다.
이러한특징을 동적타이핑이라한다.
이렇게 동적으로 변하기때문에 변화하는 변수값을 추적하기 어려운위험이있다.
그렇기때문에 아래의 특징을 지키면서 변수를 사용하는것을 추천한다
- 변수는 꼭 필요한경우에 제한적으로 사용
- 변수의 스코프는 최대한 좁게만들어 부작용 억제
- 전역변수는 최대한 사용하지 않는다.
- 변수보다 상수를 사용해 값의 변경을 억제
- 변수는 목적을 알도록 네이밍한다.
'Book > 모던 자바스크립트 Deep Dive' 카테고리의 다른 글
8. 제어문 (1) | 2024.09.27 |
---|---|
7. 연산자 (0) | 2024.09.24 |
5. 표현식과 문 (0) | 2024.09.22 |
4. 변수 (0) | 2024.09.22 |
[모던자바스크립트 Deep Dive] 자바스크립트란? (2) | 2023.08.13 |