원시타입과 객체타입
원시타입
- 숫자타입(number): 숫자. 정수와 실수 구분없이 하나의 숫자타입만 존재
- 문자열타입(string): 문자열
- 불리언타입(boolean): 논리적 참, 거짓
- undefined타입: var키워드로 선언된 변수에 암묵적으로 할당되는 값
- null타입: 값이 없다는 것을 의도적으로 명시할 때 사용하는 값
- 심벌타입(symbol): ES6에서 추가된 7번째 타입(다른 값과 중복되지 않는 유일무이한 값)
객체타입: 원시타입을 제외한 모든 것
Symbol타입
- 주로 이름이 충돌할 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용
- 심벌은 Symbol 함수를 호출해 생성한다.
- 이 때 생성된 심벌 값은 외부에 노출되지 않는다.
- 또한, 다른 값과 절대 중복되지 않는 유일무이한 값
var key = Symbol('key');
console.log(typeof key); // symbol
// 객체 생성
var obj = {};
// 이름이 충돌할 위험이 없는 유일무이한 값인 심벌을 "프로퍼티 키"로 사용
obj[key] = 'value';
console.log(obj[key]); // value
데이터 타입이 필요한 이유
1️⃣ 값을 저장할 때 확보해야 하는 "메모리 공간의 크기"를 결정하기 위해서
2️⃣ 값을 참조할 때 한 번에 읽어 들여야 할 "메모리 공간의 크기"를 결정하기 위해서
3️⃣ 메모리에서 읽어 들인 "2진수를 어떻게 해석"할지 결정하기 위해서
자바스크립트 변수는 선언이 아닌 할당에 의해 타입이 결정(= 타입 추론(type inference))된다. 그리고 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다. 이러한 특징을 동적 타이핑(dynamic typing) 이라고 한다.
- 이 관점에서, 변수는 타입을 가질까 ? 라는 질문
- 기본적으로 변수 자체는 타입을 갖지 않는다.
- 하지만, 값은 타입을 갖는다.
- 따라서, 현재 변수에 할당되어 있는 값에 의해 변수의 타입이 동적으로 결정된다고 표현하는 것이 적절하다. 변수는 단지 값에 묶여있는 값에 대한 별명이기 때문
- 자바스크립트는 정적 타입 언어 와 다르게 타입을 선언하지 않는다.
- 다만 var, const, let 키워드를 사용해 변수를 선언할 뿐
- 실질적인 값의 타입은 런타임(runtime)시 할당되는 값에 의해 결정된다.
동적 타입 언어는 유연성(flexibility) 은 높지만 신뢰성(reliability) 은 떨어진다.
- 개발자의 의도와는 상관없이 자바스크립트 엔진에 의해 암묵적으로 타입이 자동으로 변환되기도 한다.
- 복잡한 프로그램에서는 변화하는 변수 값을 추적하기 어려울 수 있다.
- 값의 변경에 의해 타입도 언제든지 변경될 수 있다. → 동적 타입 언어의 변수는 값을 확인하기 전에는 타입을 확신할 수 없다.
'Frontend > Javascript' 카테고리의 다른 글
Javascript - 변수 (0) | 2025.01.02 |
---|---|
Javascript - Scope, Closure (0) | 2024.12.23 |
Javascript - 이벤트 버블링, 캡쳐링 (0) | 2024.12.23 |
Javascript - var, let, const, Hoisting (0) | 2024.12.23 |
Javascript - async/await (0) | 2024.12.22 |