변수의 타입이란 자료형을 뜻한다.
정적타입 언어(Statically typed language)는 컴파일 시 변수의 타입이 결정되는 언어.
즉, 프로그래머가 변수에 들어갈 값의 형태에 따라 직접
변수의 타입을 명시해줘야 한다.
let str : string = 'tuna'
let num : number = 123
let bool: boolean = true
const array = [] // 이렇게 설정하면 any[]가 된다.
const array : string[] = []
const array1 : number[] = []
const array2 : boolean[] = []
// array.push(1) 에러 발생 string에 num을 넣음
// array.push("1") 정상 작동
컴파일 시에 자료형에 맞지 않는 값이 들어있으면 컴파일 에러가 발생한다.
정적타입 언어: TypeScript, JAVA, C, C++, C#, Scala, Fortran, Haskell, ML, Pascal 등이 있다.
장점: 타입 에러로 인한 문제점을 초기에 발견할 수 있어 타입의 안정성이 높음, 컴파일 시에 미리 타입을 결정하기 때문에 실행속도가 빠름
단점: 매번 코드 작성 시 변수형을 결정해줘야 하는 번거로움이 있음.
동적타입 언어(Dynamically typed languaes)는 컴파일 시 자료형을 정하는 것이 아니라 런타임 시 결정된다.
다음과 같이 타입 없이 변수만 선언하여 값을 지정할 수 있다.
let num = 123
const string = '하나둘셋'
동적타입 언어: JavaScript, Python, Grrovy, Ruby, Smalltalk, Lisp, Objective-C, PHP, Prolog 등이 있다.
장점: 런타임까지 타입에 대한 결정을 끌고 갈 수 있기 때문에 유연성이 높음
컴파일 시 타입을 명시해주지 않아도 되기 때문에 빠르게 코드를 작성할 수 있음
단점: 실행 도중에 변수에 예상치 못한 타입이 들어와 타입에러가 발생할 수 있음
동적타입 언어는 런타임 시 확인할 수 밖에 없기 때문에, 코드가 길고 복잡해질 경우 타입 에러를 찾기가 어려워 진다.
이러하나 불편함을 해소하기 위해 TypeScript나 Flow등을 사용할 수 있다.