해당 글은 [모던 자바스크립트 Deep Dive] 도서의 내용을 정리한 글입니다.
💡 객체타입
- 자바스크립트의 데이터 타입은 크게 원시 타입과 객체 타입으로 분류한다고 했다.
- 자바스크립트는 객체 기반의 언어이며, 자바스크립트를 이루고 있는 거의 모든 것이 객체라는 것이다.
- 앞에 올렸던 데이터 타입 -1 게시글에 올라온 데이터 타입 이외의 값은 모두 객체 타입이다.
💡 데이터 타입의 필요성
1. 데이터 타입에 의한 메모리 공간의 확보와 참조
메모리에 값을 저장하려면 먼저 확보해야 할 메모리 공간이 크기를 결정해야 한다.
값을 저장하기 위해 메모리 공간을 확보한 다음, 확보된 메모리에 값을 저장한다. 이러한 처리를 하려면 값을 저장할 때 확보해야 할 메모리 공간의 크기를 알아야 한다.
자바스크립트 엔진은 변수에 할당되는 값의 데이터 타입에 따라 확보해야 할 메모리 공간의 크기를 결정한다.
* ECMAScript 사양은 문자열과 숫자 타입 외의 데이터 타입의 크기를 명시적으로 규정하고 있지는 않다.
2. 데이터 타입에 의한 값의 해석
모든 값은 데이터 타입을 가지며, 메모리에 2진수, 즉 비트의 나열로 저장된다. 메모리에 저장된 값은 데이터 타입에 따라 다르게 해석될 수 있다. 예를 들어, 0100 0001을 숫자로 해석하면 65, 문자열로 해석하면 'A'다.
데이터 타입의 필요성 정리
- 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
- 값을 참조할 대 한 번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해
- 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해
💡 동적 타이핑
1. 동적 타입 언어와 정적 타입 언어
정적 타입 언어
- 정적타입언어는 변수를 선언할 때 변수에 할당할 수 있는 값의 종류, 즉 데이터 타입을 사전에 선언해야 한다. 이를 명시적 타입선언이라 한다.
- 정적 타입 언어는 변수의 타입을 변경할 수 없으며, 변수에 선언한 타입에 맞는 값만 할당할 수 있다.
- 컴파일 시점에 타입 체크를 수행한다.
- 타입의 일관성을 강제함으로써 더욱 안정적인 코드의 구현을 통해 런타임에 발생하는 에러를 줄인다.
- 대표적인 정적 타입 언어 : C, C++, 자바, 코틀린, 고, 하스켈, 러스트, 스칼라 등이 있다
정적 타입 언어 - 자바스크립트
- 자바스크립트는 변수 선언할 때 타입을 선언하지 않고, var, let, const 키워드를 사용해 선언한다.
- 자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정된다. 그리고 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다. 이러한 특징을 동적 타이핑이라 한다.
- 자바스크립트를 정적 타입 언어와 구별하기 위해 동적 타입 언어라 한다.
- 변수가 타입을 갖는다 X, 값이 타입을 갖는다 O.
- 대표적인 동적 타입 언어 : 자바스크립트, 파이썬, PHP, 루비, 리스프, 펄 등이 있다.
2. 동적 타입 언어와 변수
동적 언어의 문제점
- 변수 값은 언제든지 변경될 수 있기 때문에 복잡한 프로그램에서는 변화하는 변수 값을 추적하기 어려울 수 있다.
- 변수의 타입이 고정되어 있지 않고 동적으로 변하는 동적 타입언어의 변수는 값의 변경에 의해 타입도 언제든지 변경될 수 있다.
- 따라서 동적 타입 언어의 변수는 값을 확인하기 전에는 타입을 확신할 수 없다.
- 동적 타입 언어는 유연성은 높지만 신뢰성은 떨어진다.
변수를 사용할 때 주의할 사항(요약)
- 변수는 꼭 필요한 경우에 한해 제한적으로 사용한다. 변수의 무분별한 남발은 금물이며, 필요한 만큼 최소한으로 유지하도록 주의해야 한다
- 변수 유효 범위(스코프)는 최대한 좁게 만들어 변수의 부작용을 억제해야 한다.
- 전역 변수는 최대한 사용하지 않도록 한다.
- 변수보다는 상수를 사용해 값의 변경을 억제한다
- 변수 이름은 변수의 목적이나 의미를 파악할 수 있도록 네이밍 한다. 변수 이름은 첫아이 이름을 짓듯이 심사숙고해서지어야 한다.
반응형
'📝 Javascript > 모던 자바스크립트 Deep Dive' 카테고리의 다른 글
[Javascript] 모던 자바스크립트 Deep Dive - 08장 제어문 (0) | 2023.08.09 |
---|---|
[Javascript] 모던 자바스크립트 Deep Dive - 07장 연산자 (0) | 2023.08.09 |
[Javascript] 모던 자바스크립트 Deep Dive - 06장 데이터 타입 - 1 (0) | 2023.08.07 |
[Javascript] 모던 자바스크립트 Deep Dive - 05장 표현식과 문 (0) | 2023.08.05 |
[Javascript] 모던 자바스크립트 Deep Dive - 04장 변수 (0) | 2023.08.03 |