자바스크립트를 사용할 때는 딱히 변수의 타입을 고려하지 않고 코드를 작성해도 괜찮습니다. 그러나 개발자가 타입을 신경쓰지 않을 뿐이지. 실제로는 타입이 존재합니다. 타입은 타입이 결정되는 시점에 따라서 정적 타입과 동적 타입으로 분류됩니다.
정적 타입(Static Type)
정적 타입에서는 모든 변수의 타입이 컴파일 시점에 결정됩니다. 자바에서 흔히 String str = "Hi" 라고 선언해주듯이. 개발할때 대놓고 타입을 명시하는 애들이 정적 타입 언어에 속합니다. 타입스크립트에서도 정적 타입을 제공해주고 있구요. 타입을 명시해줘야 된다는 귀찮음이 있지만 컴파일 시점에 타입 에러를 발견할 수 있기 때문에 프로그램의 안정성을 보장할 수 있어요.
정적 타입의 장점은 다음과 같습니다.
- 타입 안정성 : 변수의 타입이 명시되어 있기 때문에 예기치 않은 타입 변환 오류를 줄일 수 있습니다.
- 가독성 향상 : 타입을 명시함으로 코드의 가독성을 높여 유지보수가 용이해집니다.
타입스크립트 정적 타입 예시 코드
// 정적 타입을 사용한 예시 코드
// 변수의 타입을 명시적으로 선언
let userName: string = "John";
let userAge: number = 30;
let isAdmin: boolean = false;
// 함수의 매개변수와 반환값의 타입을 명시적으로 선언
function greet(name: string): string {
return "Hello, " + name;
}
// 잘못된 타입 사용 시 컴파일러가 오류를 발생시킴
// userAge = "30"; // 에러: Type '"30"' is not assignable to type 'number'.
console.log(greet(userName)); // "Hello, John"
동적 타입(Dynamic Type)
변수 타입이 런타임에 결정됩니다. 파이썬과 자바스크립트가 여기에 해당됩니다. 개발자가 하나하나 타입을 정의해줄 필요가 없죠. 다만 프로그램을 실행할 때 타입 에러가 발견될 위험이 있기에 안정적이지 못합니다. 예를 들어서 아래와 같은 add 메서드가 있다고 생각해보죠.
function add(a,b){
return a+b;
}
add(3,4) //7
add("Hello"," world") //Hello World
개발자는 Number 타입의 매개변수가 들어올 것을 가정하고 코드를 작성했는데 실제로 런타임에는 String형이 들어갈 수 있습니다. 그러면 예상치 못한 결과를 반환하게 됩니다. 지금은 문자열이 Hello 와 world였지만 만약 숫자 3과 4를 서버에서 문자 타입으로 받았다면 어떻게 됐을까요?? "34"를 리턴하게 되고 저희가 원하던 결과와 맞지 않게 됩니다. 이런 케이스를 사전에 발견하는게 좋으므로 타입이 명시되는 타입스크립트를 많이 쓰게 되었습니다.
그럼에도 동적 타입만의 장점도 있겠죠.
- 유연성 : 변수의 타입을 명시적으로 선언하지 않기에 자유롭게 타입의 변경이 가능합니다.
- 빠른 개발 : 코드 작성이 더 간편하고 간단하고 빨라지죠.
자바스크립트 동적 타입 예시 코드
// 동적 타입을 사용한 예시 코드
// 변수의 타입을 명시적으로 선언하지 않음
let userName = "John";
let userAge = 30;
let isAdmin = false;
// 함수의 매개변수와 반환값의 타입을 명시적으로 선언하지 않음
function greet(name) {
return "Hello, " + name;
}
// 변수의 타입이 런타임 시점에 결정됨
userName = 42; // 유효함
userAge = "30"; // 유효함
isAdmin = "true"; // 유효함
console.log(greet(userName)); // "Hello, 42"
모든 타입을 허용하는 any
정적 타입 언어는 변수의 타입이 선언할때 지정되어 있기에 다른 타입으로의 변환이 불가하다고 언급했습니다. 그러나 타입스크립트에서는 any라는 타입을 통해서 모든 타입을 허용이 가능하고 이로 인해 number형 string형 boolean형 다양한 형태로 사용이 가능합니다. 물론 any를 쓰면 정적 타입의 장점을 잃어버리기는 하나. 타입스크립트에서도 동적 타입을 사용하는 방법을 알려드리고자 소개했습니다.