모던 자바스크립트 deep dive
06장 데이터타입
데이터타입 : 값의 종류 js의 모든 값은 데이터 타입을 갖는다.
원시타입 : 숫자, 문자열, 불리언, undefined, null, 심벌 등
객체타입 : 객체, 함수, 배열 등
1. 숫자 타입
- 정수, 실수, 음수 모두 숫자타입이다.
- 숫자타입의 값은 배정밀도 64비트 부동소수점 형식을 따른다. 따라서 모든 수를 실수로 표현한다. 정수만을 표현하는 타입은 없다.
console.log(2 === 2.0);
-
2진수, 8진수, 16진수도 모두 숫자 타입.
-
엔진은 저장은 모두 2진수로, 참조하면 모두 10진수로 해석해버린다.
-
무한대, 음의 무한대, NaN(not a number) 의 특별한 세 값도 표현한다.
2. 문자열 타입
- 문자열은 quote, double quotes, backtick(es6)으로 텍스트를 감싸고 가장 일반적인 표기법은 quote('') 이다.
- 자바스크립트의 문자열은 변경 불가능한 값 이다.(?) -- 11장에 배움
3. 템플릿 리터럴
- 템플릿 리터럴은 es6부터 도입된 새로운 문자열 표기법
- 멀티라인 문자열, 표현식 삽입, 태그드 템플릿 등 편리한 문자열 처리 기능을 제공한다.
- 템플릿 리터럴은 backtick(``)을 사용한다.
- 멀티라인 문자열
- 템플릿 리터럴 내에서는 줄바꿈이 허용되면 모든 공백이 적용된다.
- es6 전에는 멀티라인을 표현하려면 escape sequence 중 \n을 사용해야 했다.
- 표현식 삽입
- 이전에는 문자열을 +로 연결할 수 있었다.
- es6 이후 템플릿 리터럴로 쉽게 할 수 있다.
var a = '안녕';
var b = '하세요';
console.log('여러분 '+a+b);
console.log(`여러분 ${a+b}`)
4. 불리언 타입
- 참과 거짓을 나타내는 true, false 값
5. undefined 타입
- undefined 타입은 undefined 값이 유일하다.
- var로 선언한 변수는 호이스팅에 의해 undefined로 초기화한다.
- undefined를 개발자가 의도적으로 할당하는 것은 본래 취지와 어긋하고 혼란을 줄수 있기에 하지 않는게 좋다.
6. null 타입
- null 타입의 값은 null 값이 유일하다.
- 변수에 값이 없다는 것을 의도적으로 명시할 때 사용한다.
- 변수에 null을 할당하는 것은 변수가 이전에 참조하던 값을 더이상 참조하지 않겠다는 의미이다.
- 엔진은 이 메모리의 가비지 컬렉션을 수행한다.
7. 심벌 타입
- es6에서 추가된 7번째 타입이다.
- 주로 이름이 충돌할 위험이 없는 객체의 유일한 프로퍼티(객체 안에 들어있는 키와 벨류의 집합) 키를 만들기 위해 사용한다.
- 아직 잘 모르겠다 33장에서 배워야겠다.
8. 데이터 타입의 필요성
- 데이터 타입에 의한 메모리 공간의 확보와 참조
- 데이터 타입에 따라 확보해야할 메모리 공간의 크기가 결정되기 때문에 메모리를 효율적을 사용하기 위하여 데이터 타입이 큰 역활을 한다.
- 자바스크립트는 모든 숫자타입을 배정밀도 64비트 부동 소수점으로 표현하기 때문에 8바이트로 숫자를 표현한다.
- 따라서 숫자타입의 크기는 8바이트
- 엔진은 타입을 읽어 무슨타입인지 파악하고 해당 주소의 메모리에서 타입 크기만큼의 단위로 메모리를 읽는다.
- 읽어드린 메모리를 어떤 타입으로 해석할지를 결정하기 위해 데이터 타입이 사용된다.
9. 동적 타이핑
-
c, java 같은 정적타입 언어는 변수를 선언할 때, 데이터 타입을 선언해야 한다. 이를 명시적 타입 선언 이라고 한다.
-
자바스크립트는 동적 타입 언어이다. 따라서 변수를 선언할 때 var, let, const키워드를 사용해 선언만 할 뿐이다.
-
정적 타입 언어는 변수 선언 후 타입을 바꿀 수 없지만 Js는 변수에 할당되는 값에 따라서 타입도 계속 변화한다.
-
자바스크립트의 변수는 선언이 아닌 할당에 의해 데이터 타입이 결정된다.(type inference)
-
재할당에 의해 변수의 타입이 동적으로 변화한다. 이러한 특징을 동적 타이핑이라 한다.
-
타입은 변수가 가지는 것이 아닌 값이 가지는 것이다.
-
동적 타입언어의 장점은 편리하다는 것이다. 하지만 단점도 존재한다.
-
복잡한 프로그램에서는 변화하는 변수의 값을 추적하기 어려울 수 있다.
-
값을 직접 확인하기 전에는 타입임을 확신할 수 없다.
-
개발자의 의도와 다르게 암묵적으로 타입이 변경될 수 있다.
-
동적 타입언어의 장단점의 결론: 유연성은 높아지지만 신뢰성이 떨어진다.
-
동적 타입 변수 사용시 주의점
- 변수는 꼭 필요한곳에만 사용하기
- 스코프를 좁게 만들기(13장)
- 전역변수 사용 자제하기
- 변수보다는 상수 사용하기
- 네이밍을 규칙에 맞게 한다.