[모던 자바스크립트 Deep Dive] 자바스트립트의 기본 개념과 동작 원리
06장 데이터 타입
6.1 숫자 타입
6.2 문자열 타입
6.3 템플릿 리터럴
6.3.1 멀티라인 문자열
6.3.2 표현식 삽입
6.4 불리언 타입
6.5 undefined 타입
6.6 null 타입
6.7 심벌 타입
6.8 객체 타입
6.9 데이터 타입의 필요성
6.9.1 데이터 타입에 의한 메모리 공간 확보와 참조
6.9.2 데이터 타입에 의한 값의 해석
6.10 동적 타이핑
6.10.1 동적 타입 언어와 정적 타입 언어
6.10.2 동적 타입 언어와 변수
06장 데이터 타입
6.1 숫자 타입
자바스크립트에는 하나의 숫자 타입만 존재.
=> 모든 수를 실수로 처리(배정밀도 64비트 부동소수점 형식을 따름)
cf) C나 자바의 경우 int, long, float, double 둥과 같은 다양한 숫자 타입을 제공
[숫자 타입의 특별한 값 표시]
1) Infinity : 양의 무한대
2) -Infinity : 음의 무한대
3) NaN(not-a-nmber) : 산술 연산 불가
ㄴ cf) 자바스크립트는 대소문자를 구별 -> nan. Nan, nan로 표현하면 에러 발생(식별자로 해석)
6.2 문자열 타입
문자열 타입 : 텍스트 데이터를 나타내는 데 사용.
JS의 문자열 : 0개 이상의 16비트 유니코드 문자 (UTF-16)의 집합 => 전 세계 대부분의 문자를 표현
작은따옴표(''), 큰따옴표(””) 또는 백틱('')으로 텍스트를 감싸서 표현
[JS에서의 문자열 : 원시 타입]
- 문자열이 생성되면 그 문자열을 변경할 수 없음.
6.3 템플릿 리터럴 : ES6부터 도입된 새로운 문자열 표기법
- 템플릿 리터럴은 런타임에 일반 문자열로 변환되어 처리.
- 일반적 문자열과 달리 백틱(``)올 사용해 표현
6.3.1 멀티라인 문자열
1) 일반 문자열 : 줄바꿈(개행)이 허용되지 않아 이스케이프 시퀀스 사용
2) 템플릿 리터럴 : 이스케이프 시퀀스를 사용하지 않고도 줄바꿈이 허용, 모든 공백도 있는 그대로 적용
6.3.2 표현식 삽입
1) 일반 문자열 : 문자열은 문자열 연산자 +를 사용해 연결.
ㄴ + 연산자는 피연산자 중 하나 이상이 문자열인 경우 문자열 연결 연산자로 동작
2) 템플릿 리터럴 : 표현식 삽입 가능
ㄴ 표현식의 평가 결과가 문자열이 아니더라도 문자열로 타입이 강제로 변환되어 삽입
var first = 'Ung-mo';
var last = 'Lee';
// ES6 표현식 삽입
console.log( My name is ${first} ${1ast}. ); // My name is Ung-mo Lee
6.4 불리언 타입
true와 false
6.5 undefined 타입
undefined 타입의 값 : undefined가 유일
개발자가 의도적으로 할당하기 위한 값X(자바스크립트 엔진이 변수를 초기화 할 때 사용하는 값)
- 개발자가 의도적으로 변수에 undefined를 할당하는것은 권장하지 않음
ㄴ 대안 : null값
6.6 null 타입(의도적 부재)
null 타입의 값 : null이 유일
변수가 이전에 참조하던 값을 더 이상 참조하지 않겠다는 의미
- null : 프로그래밍 언어에서 nuU은 변수에 값이 없다는 것을 의도적으로 명시할 때 사용.
ㄴ함수가 유효한 값을 반환할 수 없는 경우 명시적으로 nuU을 반환하기도 함.
ex) HTML 요소를 검색해 반환하는 document.querySelector 메서드 : 해당 HTML 요소를 검색할 수 없는 경우 에러 대신 null 반환
cf) 자바스크립트는 대소문자를 구별하므로 nuU은 NuU, NULL 등과 다름
6.7 심벌 타입
심벌타입 : 변경 불가능한 원시 타입의 값
즉, 다른 값과 중복 되지 않는 유일무이한 값
주로 이름이 충돌할 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용
[심벌 타입의 생성과, 다른 원시 값의 생성]
1) 심벌 이외의 원시 값 : 리터럴을 통해 생성
2) 심벌 : Symbol 함수를 호출해 생성
[심벌 타입의 특징]
- 심벌 값은 외부에 노출되지 않음
- 다른 값과 절대 중복되지 않음
6.8 객체 타입
자바스크립트를 이루고 있는 거의 모든 것이 객체
6.9 데이터 타입의 필요성
6.9.1 데이터 타입에 의한 메모리 공간 확보와 참조
[메모리 공간 확보]
- 자바스크립트 엔진은 데이터 타입. 즉 값의 종류에 따라 정해진 크기의 메모리 공간을 확보
ㄴ 즉, 변수에 할당되는 값의 데이터 타입에 따라 확보해야 할 메모리 공간의 크기가 결정
- ECMAScript 사양은 문자열과 숫자 타입 외의 데이터 타입의 크가를 명시적으로 규정하지 않음
ㄴ 따라서 문자열과 숫자 타 입S 제와하고 데이터 타입에 따라 학보되는 메모리 공간의 크기는
자바스크립트 엔진 제조사의 구현에 따라 다를 수 있음
[심벌 테이블]
- 컴파일러 또는 인터프리터 : 심벌 테이블이라고 부르는 자료 구조를 통해,
식별자를 키로 바인딩된 값의 메모리 주소 데이터 타입, 스코프 등 관리
6.9.2 데이터 타입에 의한 값의 해석
[데이터 타입이 필요한 이유]
값율 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
값율 참조할 때 한번에 읽어 들여야 할 메모리 공간의 크기를 정하기 위해
메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해
6.10 동적 타이핑
6.10.1 동적 타입 언어와 정적 타입 언어
[정적 타입 언어(C, 자바): 명시적 타입 선언]
- 변수를 선언할 때 변수에 할당할 수 있는 값의 종류, 즉 데이터 타입을 사전에 선언해야 함
ㄴ컴파일 시점에 타입 체크(선언한 데이터 타입에 맞는 값을 할당했는지 검사하는 처리》를 수행하기 때문.
=> 타입 체크를 통과하지 못했다면 에러를 발생시키고 프로그램의 실행 자체를 막음.
[자바 스크립트 : 동적 타입 언어(동적 타이핑)]
- 자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정
ㄴ 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있음
- 변수를 선언할 때 타입을 선언하지 않음.
ㄴvar. let, const 키워드를 사용해 변수를 선언할 뿐->어떠한 데이터 타입의 값이라도 자유롭게 할당가능
변수는 타입을 갖지 않는다. 하지만 값은 타입을 갖는다
6.10.2 동적 타입 언어와 변수
- 동적 타입 언어의 변수는 값을 확인하기 전에는 타입을 확 신할수 없음
ㄴ 안정적인 프로그램을 만둘기 위해 변수를 사용하기 이전에 데이터 타입을 체크해야 하는 경우 有
가독성이 좋은 코드가 좋은 코드다.
컴퓨터가 이해하는코드는 어떤 바보도 쓸수 있다.
하지만 훌륭한 프로그래머는 사람이 이해할 수 있는 코드를 쓴다.
- 마틴 파울러
정리 기본 출처 : [모던 자바스크립트 Deep Dive 이웅모 지음]
'Web_Backend > Javascript' 카테고리의 다른 글
[모던 자바스크립트 Deep Dive] 8장_제어문 (0) | 2022.03.17 |
---|---|
[모던 자바스크립트 Deep Dive] 7장_연산자 (0) | 2022.03.17 |
[모던 자바스크립트 Deep Dive] 5강_표현식과 문 (0) | 2022.03.17 |
[모던 자바스크립트 Deep Dive] 4강_변수 (0) | 2022.03.17 |
[모던 자바스크립트 Deep Dive] 3강_자바스크립트 개발 환경과 실행 방법 (0) | 2022.03.17 |
야나의 코딩 일기장 :) #코딩블로그 #기술블로그 #코딩 #조금씩,꾸준히
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!