0w0

타입을 권함

들어가기

JavaScript를 열심히 배우고 있는데 어느 순간 typescript에 대한 이야기가 계속 들려왔다.

그런데 이상하게 괴리감을 느껴서 덮어두고 typescript는 좀... 굳이... 생각했었는데

이번에 진지하게 타입에 대해 생각해보려한다.

나쁜 것이면 이렇게 많은 사람이 쓰라고 권하지는 않을테니.

MS가 열심히 관리하지 않을테니.

글을 목적은 (내게) 타입을 권함이다.

왜 typescript에 괴리감을 느끼는가?

우선 왜 typesciprt(이하 TS)를 느끼는가부터 판단해보고자 한다.

두서없이 나열하면

이유는 모르겠지만 써야한다는 분위기

설명없이 그냥 써야한다는 분위기에 괴리감을 느낀다.

강압적인 분위기...

어느 채용 공고, 어떤 글을 보아도 쓴다/쓰라고만 하지 왜 써야하는가 찾아보려해도 도저히 명쾌한 답을 얻을 수 없다.

가장 많이 본 것은 그냥 좋음이다.

물론 진짜로 그냥 좋을 수 있지만...

그럼에도 불구하고 어딘가에는 설명을 해주는 사람이 있었으면 좋겠다.

TS의 독자적 문법

type, enum, interface, generic, JS에 없는 class 기능

JS에 없는 TS 문법도 거슬린다.

물론 다른 정적타입 언어에 있는 기능이기도해서 아예 생소하지는 않다.

대충봐도 이게 뭐겠거니 싶다.

게다가 타입은 함수형 프로그래밍에서도 쓴다. 그러나 뭐라할까... 느낌으로 표현하면 TS의 타입은... OOP를 위한 타입 같다. 나도 뭔소리인지 모르겠다

애초에 JS는 Object가 강력한 언어라서 저 위에 표기한 독자적 기능 대부분을 Object로 할 수 있을 것 같기도 하다.

결국 JS로 컴파일 하는 것

어떻게 쓰든 결국 TS도 JS로 컴파일하는 것이기 때문에 여기서 또 괴리감이 든다.

아니 어차피 TS는 JS로 컴파일하고, 속도도 JS가 빠른데다가, 점점 JS는 개선되려 노력하는데 왜 굳이 TS를 써야하는건지 모르겠다.

길어지고 늘어지는 코드

function add(a, b) {
  return a + b;
}
function add(a: number, b: number) {
  return a + b;
}

이렇게 단순한 코드여도 벌써 16글자가 많다.

하물며 이보다 더 복잡한 함수라면 어떻게 되는가?

또한 타입 명시 하기 위해, TS를 쓰기 위해, 그에 따른 설정도 굳이 해줘야하는 번거로움이 있다.

타입 정의 파일 따로 만들어둬야 하기도 한다.

광신도

타입이 안정성을 보장한다는 말이 신뢰가 안 된다.

정말 그렇다면 타입이 있는 언어로 만든 모든 프로그램은 버그가 없어야하는데 실은 그렇지 않다...

ㅇㅇ주도개발에 반드시 존재하는 광신도가 TS에도 있다.

이런 모습을 보면 오히려 TS에 대한 신뢰가 낮아진다...

그럼 왜 타입을 써야하는가

나름대로 생각해보니 2가지 이유가 있다.

(둘이 비슷한 소리여서 1가지 이유일 수도 있겠다)

협업과 오히려 읽기 편함

사람은 망각의 동물이다.

다른 사람의 코드가 아니라 자기 코드도 6개월 뒤에 본다면, 변수명만으로 이게 뭔지 기억하지 못할 수도 있다.

(이건 또 다른 문제이기는 하지만)

그리고 다른 사람한테 설명하는 것도 귀찮을 수 있다.

function add(a, b) {
  return a + b;
}

이 함수가 무엇을 뜻하지 알기 어려울 수도 있다.

add를 봤을 때 먼저 숫자를 더하는 함수라 생각할 수 있지만 누군가는 문자열을 더해주는 함수인가?, 배열을 더해서 문자열을 만드는 함수인가? 생각할 수 있다.

그래서 숫자라면 numberAdd 문자열이면 stringAdd이라 함수명을 바꿔야하는 상황이 올 수도 있다.

하지만 만약 TS였다면

function add(a: number, b: number) {
  return a + b;
}

이렇게 명시되어, 실수로 다른 것을 넣으면 TS는 에러를 뿜는다.

여기에 함수명을 위와 같이 ㅇㅇAdd로 정하면 안전장치를 2개 걸어두는 기분이 들기까지 한다.

더욱이 이렇게 좋은 함수명과 타입이 정의된 코드라면 다른 사람이 봐도 명백하다.

TS 독자적 문법을 사용하더라도 그것을 에디터에서 클릭해서 넘어가서 구경하고 오면 될 뿐이다.

만약 코드가 몇 만 줄, 몇 십만 줄이 되는 프로젝트라면 타입과 함수명을 통해 함수를 예측할 수 있는 것 자체가 감사할 것이다.

결론

이렇게 쓰고 보니 어떤 느낌으로 필요로 한가 두루뭉실하게 알 듯하다만, 여전히 TS의 매력이 느껴지지 않는다.

만약 애초에 타입이 있는 Rust, C 같은 언어였다면 오히려 타입이 있는 것이 좋다 생각했을 것이지만, 애초에 언어가 없는 언어에 굳이 타입을 만든 느낌이기 때문이다.

강한 타입 추정으로 잃는 것 만큼, 얻는 것이 있는데, 모든 언어를 천편일률적으로 획일화하려는 느낌이랄까...

그렇게 타입이 필요하면 타입이 있는 언어를 사용하면 되는 것이 아닌가 싶기도 하다...