📂6장 데이터 타입⏳👩💻💻
- 모든 값은 데이터 타입을 가짐.
- ES6에선 7개의 데이터 타입을 제공, 원시 타입과 객체 타입으로 나뉨
데이터 타입의 필요성
- 데이터 타입에 의한 메모리 공간의 확보와 참조
- 변수에 할당되는 값의 데이터 타입에 따라 확보해야 할 메모리 공간의 크기가 결정됨.
var score = 100
💻 자바스크립트엔진 저장할때
- 리터럴 100을 숫자 타입의 값으로 해석
- 숫자 타입은 8바이트로 설명하기 때문에 8바이트의 메모리 공간 확보
- 100을 2진수로 변환 후 저장.
💻 자바스크립트엔진 참조할때
- score 변수를 숫자 타입으로 인식
- 숫자 타입은 8바이트 단위로 저장
- score 변수를 참조하면 8바이트 단위로 메모리 공간에 저장된 값(2진수)을 숫자타입으로 읽음.
- 데이터 타입에 의한 값의 해석
- 위 자바스크립트 엔진이 참조할때 메모리 공간에서 읽은 2진수를 해석한다.
- 데이터 타입에 따라 숫자, 문자열 등등으로 2진수를 해석함.
원시 타입
숫자 타입
- 숫자 타입의 배정밀도 64비트 부동소주점 형식을 따름.
var binary = 0b0100001; // 2진수 var octal = 0o101; // 8진수 var hex = 0x41; // 16진수` console.log(binary) // 65 console.log(octal) // 65 console.log(hex) // 65 console.log(binary == octal) // true console.log(octal == hex) // true
- 모든 수는 실수로 처리하며, 정수 처리를 위한 타입이 별도로 존재하지 않음
console.log(1 === 1.0) // true
console.log(4 / 2) // 2
console.log(3 / 2) // 1.5
- cf) C나 자바는 정수나 실수를 구분하고 다양한 숫자타입이 있음
숫자타입 - infinity, -infinity, NaN
- infinity : 양의 무한대
- -infinity : 음의 무한대
- NaN : 산술 연산 불가, 대소문자 표기 주의
문자열 타입
- 0~16비트 유니코드 문자(UTF-16)
- 변경 불가능한 값 => 11장 이어 설명 예정
템플릿 리터럴
- ES6부터 도입
- 런타임에 일반 문자열로 변환되어 처리
멀티라인 문자열
백틱을 이용하여 줄바꿈을 허용하고 모든 공백도 적용함.
const result = `축하합니다.
당첨번호 : 5번
당첨금액 : 5천만원`
console.log(result)
/\*
축하합니다.
당첨번호 : 5번
당첨금액 : 5천만원
\*/
표현식 삽입
-
- 연산자를 사용해 연결함.
- 백틱 `과 ${}에 표현식을 감싸서 나타냄.
const first = "choi" const name = "yujin" console.log("My name is "+first+ " " + name+".") // My name is choi yujin. console.log(My name is ${first} ${name}.)// My name is choi yujin.
불리언 타입
- 참은 true
- 거짓은 false
8장 조건문에서 이어 설명
undefined 타입
- 자바스크립트 엔진이 변수를 초기화 할 때 사용하는 값
=> 만약 변수를 참조했을 때 undefined가 반환된다면, 참조한 변수가 선언 이후 값이 할당된 적이 없는 초기화 되지 않은 변수임.
null 타입
- 변수에 값이 없다는 것을 의도적으로 명시 (undefined X)
- 변수가 이전에 참조하던 값을 더 이상 참조하지 않겠다라는 의미
- 💻자바스크립트 엔진은 누구도 참조하지 않는 메모리 공간에 가비지 콜렉션을 수행
- 함수가 유효한 값을 반환할 수 없는 경우 명시적으로 null을 반환하기도 함.
심벌 타입
- 값이 외부에 노출되지 않으며 중복되지 않는 값
- 객체의 유일한 프로퍼티 키를 만들기 위해 사용
- Symbol 함수를 호출해 생성
var Key = Symbol('key'); console.log(typeOf key); // Symbol var obj = {} obj[key] = 'value' console.log(obj[key]); // value
객체 타입
- 자바스크립트를 이루고 있는 거의 모든 것이 객체.동적 타이핑
- 정적 타입
- C나 자바에서 쓰임
- 변수 선언 시 데이터 타입을 미리 선언 => 명시적 선언
- 동적 타입
- 자바스크립트
- 테이터 타입 값을 자유롭게 할당 가능
- 값을 할당하는 시점에 변수의 타입이 동적으로 결정, 제할당에 의해 타입을 언제든지 변경 가능 => 동적 타이핑
- 변수는 선언이 아닌 할당에 의해 데이터 타입이 결정 => 타입 추론
동적 타이핑의 단점
- 복잡한 프로그램에서 변화하는 변수 값을 추적하기 어려우.
- 값을 확인하기 전까지 타입을 확신할 수 없음
- 유연성이 높지만 신뢰성이 떨어짐.
동적 타이핑 주의 사항
- 변수는 제한적으로 사용하자
- 변수의 유효 범위는 최대한 좁게 만들자.
- 전역 변수는 최대한 사용하지 않는다.
- 변수 보다는 상수를 이용해 값을 변경을 억제하자
- 변수 이름은 가독성있게 정하자.
앞서 배운 데이터타입 검사가 궁금하다면 아래 글을 참고하세요
2022.12.07 - [개발언어] - 데이터 타입 검사 ( 원시타입과 객체타입에 따른)
[모던 자바스크립트 Deep Dive, ⌜이웅모 ⌟, 위키북스, 20210103]를 읽고 정리한 글입니다.
'개발언어 > [JS] deep-dive 정리' 카테고리의 다른 글
[9장] 단축 평가 - 논리 연산자를 사용한 단축 평가 (0) | 2022.12.12 |
---|---|
[9장] 타입 변환 (0) | 2022.12.12 |
8장 제어문 (2) | 2022.12.10 |
5장 표현식과 문 (0) | 2022.12.03 |
4장 변수 (0) | 2022.12.02 |
댓글