자바스크립트는 동적 타입(dynamically typed) 언어이다. 즉, 변수에 어떤 타입의 값이든 할당할 수 있고, 실행 중에 타입이 바뀔 수도 있다. 정적 타입 언어(Java, TypeScript 등)와 달리, 컴파일 타임에 타입 검사가 이뤄지지 않는다.
다음은 자바스크립트의 타입 시스템의 주요 특징이다:
자바스크립트의 기본 데이터 타입은 다음과 같다:
타입 | 예시 |
---|---|
string | "hello" , 'world' |
number | 1 , 3.14 , -42 |
boolean | true , false |
null | null |
undefined | 변수 선언 후 초기화 안 된 상태 |
bigint | 123456789012345678901234567890n |
symbol | Symbol('id') |
Object
)Array
)Function
)Date
) 등등let obj = { name: 'John' };
let arr = [1, 2, 3];
let fn = function() { return 'Hello'; };
변수는 어떤 타입이든 가질 수 있으며, 재할당을 통해 타입이 바뀔 수 있다:
let x = 10; // number
x = 'hello'; // 이제 string
x = true; // 이제 boolean
자바스크립트는 상황에 따라 자동으로 타입을 변환한다:
'5' + 1 // '51' (문자열로 변환)
'5' - 1 // 4 (숫자로 변환)
true + 1 // 2 (true → 1)
false + '1' // 'false1'
이런 특징 때문에 버그 발생 가능성이 높고, 유지보수 시 주의가 필요하다.
런타임에 타입을 확인하려면 typeof
연산자를 사용한다:
typeof 42 // 'number'
typeof 'hello' // 'string'
typeof null // 'object' ← 이건 자바스크립트의 오래된 버그
type of [] // 'object'
type of {} // 'object'
typeof function(){} // 'function'
자바스크립트의 유연하지만 위험한 타입 시스템을 보완하기 위해 TypeScript가 등장했다.
TypeScript는 정적 타입 검사, 인터페이스, 제네릭 등을 제공해 대규모 애플리케이션 개발에 더 적합하다.
특징 | 설명 |
---|---|
동적 타입 | 변수에 어떤 타입이든 저장 가능 |
타입 추론 없음 | 런타임에 타입 결정 |
타입 안전성 낮음 | 실수로 타입 바꿔도 에러 없음 |
타입스크립트 권장 | 정적 타입 검사를 원한다면 |