얼레벌레

모던자바스크립트 Deep Dive - 6장 데이터 타입 본문

JavaScript/모던자바스크립트 Deep Dive

모던자바스크립트 Deep Dive - 6장 데이터 타입

낭낭이 2022. 3. 14. 23:10

자바스크립트는 7개의 데이터 타입이 있음

원시 타입(primitive type) - 숫자(number), 문자열(string), 불리언(boolean), undefined, null, 심벌(symbol)

객체 타입(object/reference  type) - 객체, 함수, 배열 등

 

▪️ 숫자 타입

- C나 Java와 다르게, float, int, 2/8/16진수 등에 구분 없이 64비트 부동소수점(실수) 형식의 하나의 숫자 타입만 존재한다.

- 세가지 특별한 값을 표현할 수 있다 ⇨ Infinity, -Infinity, NaN(not-a-number)

// 숫자 타입은 모두 실수로 처리!
console.log(1 === 1.0) // True

// 세가지 특별한 값
console.log(1/0) // Infinity
console.log(1/-0) // -Infinity
console.log(1*'string') // NaN

▪️ 문자열 타입

- '', "", `` 으로 감싸서 표현함 ⇨ 키워드나 식별자 같은 토큰과 구분하기 위함

- 자바스크립트의 문자열은 원시타입으로 변경 불가능한 값임

✔️ 템플릿 리터럴(template literal)

- ``(백틱)을 이용해 표현함

- 표현식 삽입(expression interpolation) 가능 ⇨ ${}로 표현식을 감싼다.

- 평가 결과가 문자열이 아니더라도 문자열타입으로 강제 변환돼 삽입

// backtick이 아닌 escape sequence 사용 시
let template = '<ul>\n\t<li><a href='#none'>Home</a></li>\n</ul>'

// backtick	사용 시(template literal)
let template = `<ul>
	<li><a href='#none'>Home</a></li>
</ul>`;

// expression interpolation 미사용 시
const first='Nang ni';
const last='Kim';

console.log('My name is '+first+' '+last+'.') // My name is Nang ni Kim.

// expression interpolation 사용 시
console.log(`My name is ${first} ${last}.`) // My name is Nang ni Kim.

▪️ 불리언 타입

- 논리적 참, 거짓을 나타냄 ⇨ true, false

 

▪️ undefined 타입

- 값으로 undefined가 유일

- 개발자가 의도적으로 할당하는 값이 아닌, 자바스크립트 엔진이 변수를 초기화할 때 사용하는 값

- 값이 없다는 것을 명시하고 싶은 경우는 undefined가 아닌 null을 사용해야 함

 

▪️ null 타입

- 값으로 null이 유일

- 변수에 값이 없다는 것을 의도적으로 명시할 때 사용 ⇨ 즉, 이전에 참조하던 값을 더 이상 참조하지 않겠다는 의미

- 유효한 값을 반환할 수 없는 경우 명시적으로 null을 반환하기도 함

 

▪️ 심벌 타입

- 다른 값과 중복되지 않는 유일한 값

- 보통 객체의 유일한 프로퍼티 키를 만들기 위해 사용

- Symbol() 함수를 사용해 생성

 

❗️ 데이터 타입이 필요한 이유

0️⃣ 값을 저장할 때 확보할 메모리 공간의 크기를 결정하기 위함

1️⃣ 값을 참조할 때 한번에 읽을 메모리 공간의 크기를 결정하기 위함

2️⃣ 메모리에서 읽은 2진수, 즉 비트의 나열을 어떻게 해석할지 결정하기 위함

 

✔️ 정적 타입 언어와 동적 타입 언어

▫️ 정적 타입 언어(C, Java 등)

- 변수를 선언할 때 변수에 할당할 수 있는 값의 종류를 사전에 선언

- 변수 타입 변경 불가, 변수에 선언한 타입에 맞는 값만 할당 가능

 

▪️동적 타입 언어(Python, Javascript 등)

- 변수 선언 시 사전에 타입 선언 X

- 어떤 데이터타입이든 할당 가능

- 선언이 아닌 할당에 의해 타입 결정됨 - 타입 추론 (type inference)

 

⚠️ 따라서 동적 타입 언어는 유연성은 높지만 신뢰성은 낮아 변수 사용 시 주의를 요함!

- 변수는 제한적으로 사용한다

- 전역변수 사용을 최대한 자제한다

- 의미 있는 변수 네이밍

- 변수의 유효 스코프를 최대한 좁게 만들어 오류 발생 확률을 낮춘다

- 변수보다는 상수(const)를 사용해 값의 변경을 억제한다

Comments