티스토리 뷰

🌱 타입스크립트

기존의 자바스크립트를 더 안전하게 사용할 수 있도록 여러 가지의 타입 관련 기능을 추가한 언어

즉, 자바스크립트의 확장판 언어이다.

 

그런데 자바스크립트가 아닌 타입스크립트를 왜 배워야 할까?

 

자바스크립트는 원래 간단한 상호작용 정도를 처리하기 위해 개발되었다.

 

그렇기 때문에 문법이 아주 유연하고 프로그래머가 아주 쉽고 간결하게 코드를 작성하는 데에 중점을 두고 만들어졌다.

버그로부터의 안정성이나 견고함을 일부 포기하게 되었지만 간단한 프로그램에서는 전혀 문제가 되지 않았다.

하지만, Node.js의 등장 이후 간단한 프로그램에서 복잡한 프로그램으로 자바스크립트의 범위가 확장되어 유연함이 안정성을 떨어뜨리는 단점이 되었다.

그래서 이런 문제점을 극복하기 위해 자바스크립트의 기존 문법과 장점은 그대로 유지한 채 안정성만 추가로 확보한 언어인 타입스크립트가 등장하게 되었다.

 


 📍 자바스크립트의 한계점 

자바스크립트는 동적 타입 시스템으로 변수의 타입을 직접적으로 정의하지 않아 코드가 실행되는 도중에 변수의 타입이 결정된다.

따라서 변수의 타입이 하나로만 고정되지 않으므로 아무 타입의 값이나 자유롭게 담을 수 있다.

하지만 이런 유연함은 큰 단점이 존재한다.

위와 같이 처음에 문자열로 선언된 변수를 숫자 타입으로 바꾼 후 문자열 전용 메소드를 사용한 코드를 실행한다면 어떻게 될까?

 이 코드는 실행은 되지만 오류가 발생한다.

여기서 주의깊게 볼 점은 실행은 된다는 점이다.

이렇게 간단한 코드에서는 오류가 난 부분을 한 번에 찾을 수 있지만 코드가 복잡한 경우에는 오류가 실행과 동시에 발생하지 않고 나중에 발생하게 되는 경우도 있어 오류가 어디서 나는 건지를 찾기 힘들어질 수 있다.

그렇게 된다면 예상치 못한 오류로 인해 프로그램이 강제 종료되고 서비스가 마비되 사용자들에게 큰 불편함을 줄 수 있다.

 

반면, 정적 타입 시스템의 경우에는 이런 오류를 사전에 막을 수 있다.

Java의 경우 정적 타입 시스템을 사용하므로 모든 변수의 타입을 다 지정해주어 코드 실행 이전에 모든 변수의 타입을 결정한다.

위의 코드에서 문자열타입의 a와 숫자 타입의 b를 곱해 숫자 타입의 c변수를 선언하면 에디터상에서 빨간줄이 그어져 코드가 잘못되었음을 나타낸다. 

이렇게 코드 실행 전에 타입에 대한 오류를 알려주고 검사가 완료되어야 실행이 되므로 오류가 있는 경우 실헹이 불가하므로 오류를 사전에 막을 수 있다.

 

하지만, 정적 타입 시스템도 단점이 존재한다.

 

모든 변수의 타입을 일일히 정의해야 하기 때문에 작성해야하는 코드의 양이 상당히 많아진다.

미리 작성한 자바스크립트 코드에 모든 변수에 대한 타입을 정의해야한다면 굳이 자바스크립트를 사용해야할까,,,?

 


📍 타입스크립트의 타입 시스템

그래서 타입스크립트는 동적 타입 시스템과 정적 타입 시스템을 혼합한 타입 시스템을 사용한다.

코드 실행 전에 변수의 타입을 결정 -> 타입 오류가 없는지 프로그램 실행 전에 코드 검사 (정적 타입 시스템)

 

그렇다면 모든 변수에 직접 타입을 명시해야 할까?

변수에 숫자값을 넣음 -> 자동으로 변수를 숫자 타입으로 인지 (동적 타입 시스템)

 

결론적으로 타입스크립트는 동적 타입 시스템의 단점과 정적 타입 시스템의 단점을 동시에 해결하는 점진적 타입 시스템(Gradual Type System)을 사용한다. 즉, 점진적으로 타입이 정의된 변수들에 대해서는 타입을 미리 결정하고 타입이 정의되지 않은 변수들에 대해서는 타입을 자동으로 추론하는 타입 시스템이다.

 


🌈 정리하기

타입스크립트는 자바스크립트의 확장판 언어로, 동적 타입 시스템의 유연함과 정적 타입 시스템의 안정성을 확보한 점진적 타입 시스템을 갖춘 언어이다.

 

🔗 타입스크립트 강의

 

한 입 크기로 잘라먹는 타입스크립트 - 인프런 | 강의

문법을 넘어 동작 원리와 개념 이해까지 배워도 배워도 헷갈리는 타입스크립트 이제 제대로 배워보세요! 여러분을 타입스크립트 마법사🧙🏻‍♀️로 만들어드립니다., 프론트엔드의 피할 수

www.inflearn.com

 

728x90