티스토리 뷰
제목을 보고 당황스러운 사람들이 꽤 많을것이라고 생각할 것이다. 누가 뭐래도 Javascript 언어의 대세는 Typescript 이기 때문이다. 그런데도 이 글을 쓰는 이유는 왜 Javascript 에서 Typescript 로 넘어가는지 생각해보는 시간을 갖기 위해서다.
Typesciprt와 Javascript
누가뭐래도 Typescript 를 사용하는 이유는 Type 을 제공하지 않는 Javascript 에서 형식을 지정할 수 있기 때문이다. 왜 굳이 Type 이 필요한지 의문이 들 수 있는데, Java 와 같은 형식이 있는 언어를 사용하던 개발자들에게 Type 이 없다는 것은 낯설고 거북스러울 수 밖에 없다. 그런 개발자들에게 Typescript 는 축복일 수 밖에 없다. 무엇보다도 형식(Type)을 지정하면 가독성이 좋아지기 때문에 많은 개발자들이 Typescript 를 사용한다.
그런데 시대에 역행한다고 한다는건 무슨 소리인가? 도대체 시대의 흐름은 무엇이길래 이런 이야기를 하는걸까?
다른 언어의 흐름
업무적으로나 학업으로 쉽게 접할 수 있는 언어인 C++ 을 먼저 살펴보자. C++ 에 추가된 키워드 중에는 auto 라는 것이 있다. auto는 아래와 같은 경우에 주로 사용한다.
std::unordered_map< MyDataId, std::vector< MyDataClass > > myMap;
// auto를 사용하지 않는 버전
for(std::unordered_map< MyDataId, std::vector< MyDataClass > >::const_iterator it : myMap) {
...
}
// auto를 사용한 버전
for(auto it : myMap) {
...
}
위 코드에서 변수 it 의 형식을 지정하는 것이 과연 가독성이 좋다고 말할 수 있는가? 오히려 auto 를 사용했을때 코드의 가독성은 더 증가하였다. 뿐만 아니라 myMap 의 형식이 변경 되었을때 auto 를 사용한 경우에는 it 의 형식을 변경할 필요가 없어졌다.
Java 개발자들에게 많은 지지를 받고 있는 kotlin 에서도 마찬가지이다. 형식을 특별히 지정해주지 않으면 auto 와 같이 된다.
Typescript는 흐름의 역행하는 것인가?
새로운 언어들은 기본적으로 auto 와 같은 자동 형식 연역을 제공하고, 기존의 언어들조차 자동 형식 연역 기능을 추가하였다. 그런데 유독 왜 Javascript 에서만 Typescript 라는 새로운 언어를 만들어서까지 형식을 제공해주려는걸까?
Javascript의 특징
그 이유를 이해하기 위해서는 Javascript 언어의 특징을 이해해야한다. Javascript 는 가장 대표적인 인터프리터 언어다. 다시 말하면 컴파일러가 없다는 의미이다. 그렇기에 타입이란 것이 존재할 필요가 없다. 어차피 컴파일러가 없어 실행 전에 미리 문제를 확인할 수 없기 때문이다. 만약 타입이 있다고 해도 코드가 실행이 되어야지만 타입 체크를 할 수가 있고 런타임 중에 타입 체크를 하기에는 성능에도 좋지 않다. 그래서 Javascript 는 런타임 중에 primitive type 의 경우에만 타입 체크를 실행한다.(string, int와 같은) 덕분에 Javascript의 진입 장벽을 낮추는데 기여할 수 있었다.
하지만 Javascript 를 오랫동안 사용하다보니 위 장점이 단점으로 나타났다. 문법이나 변수명을 잘못 입력한 경우 그 코드가 실행이 되어야지만 문제가 있다는 것을 알 수 있다. 특별한 케이스에서만 사용되는 코드라던가 라이브러리를 사용하는 경우에 라이브러리에서 필요로하는 타입을 알기 어려워 문제를 놓치고 갈 수 있다. 이는 사용자에게 악영향을 끼칠 수 있다.
그래서 Microsoft 는 Javascript에게 컴파일러와 같은 것을 만들어주기로 하였고, 그 결과가 바로 Typescript 이다. 우리가 Typescript 를 작성하면 일종의 컴파일러가 Javascript 로 코드를 변환시키는데, 이 과정에서 타입을 검사하게 된다. 결과적으로 Typescript 는 Javascript 를 베이스로 사용하기 때문에 C++ 의 auto 와 같은 기능을 사용하는데에도 문제가 없다.
C++에서 auto를 사용하는데 성능 문제가 없는 이유는?
C++의 경우에는 Javascript와 다르게 auto가 런타임 속도에 문제를 일으키지 않는다. 그 이유는 컴파일러가 auto 를 적절한 타입으로 연역시키기 때문이다. 덕분에 컴파일 속도에는 영향을 미칠 수 있지만 런타임 속도에는 문제가 없다. 컴파일러를 사용하는 언어라면 C++과 같이 동작할 것이다.
결론
앞선 내용을 정리하면 다음과 같이 정리할 수 있다.
- 인터프리터 언어인 Javascript는 타입 문제를 런타임 중에 확인 가능하다.
- Typescript는 Javascript의 컴파일러와 같은 역할로 런타임 전에 타입 체크를 해준다.
- 컴파일러가 있는 언어의 경우, 컴파일 시에 타입을 연역시켜주어 런타임 속도에 문제가 없다.
'프로그래밍' 카테고리의 다른 글
[Git] LFS를 사용할때 주의할점 (0) | 2019.07.22 |
---|---|
[프로그래밍] Overloading과 Overriding (0) | 2019.05.08 |
- Total
- Today
- Yesterday
- Join
- Perfect
- async
- Unreal
- 다이소
- forward
- 발아시기
- C++11
- C
- Overloading
- detach
- Effective Modern C++
- const
- Future
- CPP
- 보편 참조
- MOVE
- 보편참조
- Effective
- Override
- std::move
- C++14
- 포인터
- C++
- Forwarding
- thread
- 람다
- Modern
- auto
- std::forward
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |