2023-01-16 월요일

·2023년 1월 16일
0

Today I Learned

목록 보기
54/114
post-thumbnail

✏️ 무엇을 배웠나


1. Typescript

왜 타입스크립트인가?

MDN에 설명되어 있는 것처럼 JS는 동적 언어다. 동적 언어라고 할 때 핵심은 변수의 타입이 특정되지 않고, 모든 타입의 데이터로 할당하고 재할당이 가능하다는 것. 이 사실을 모르더라도 JS를 사용한다면 몸으로 알고 있을 것임.

let str = 'ten';
str = 10;
str = [];

// 변수 str은 10으로 재할당되었다.
// 변수 str은 빈 배열로 재할당되었다.

반대로 정적 언어(C, Go, Rust 등)는 컴파일 과정에서 변수 타입이 확정된다. (동적 언어인 JS의 경우 런타임 과정에서 확정됨) 컴파일 과정에서 변수가 확정되니까 런타임 과정 전에 에러를 확인할 수 있는 장점이 있는데, TS는 이런 정적 언어의 특징을 JS에 끼얹어 버린 언어다. 한 번 정해진 변수의 타입은 곧 죽어도 바꿀 수 없다. 이런 제한적인 환경이 개발을 할 때 도움이 된다.

TS = 변수 타입을 명시하는 기능 + JS라고 해도 무방하다

// js
function A(a, b) {
	return a - b
}

A('3') // 1
A(1) // 2

JS에서 주석 처리한 1, 2 함수를 로그로 찍어보면 NaN이 뜬다. 함수에는 파라미터 2개가 정의되어 있고 딱 봐도 숫자가 들어가야만 할 것 같지만 JS는 모른다. 분명 문제가 있지만, 에러 메시지도 없고 뭐가 잘못된 건지 힌트도 없다. 이게 에러를 찾기 힘들게 만들고 유지보수를 어렵게 만든다.

JS로 개발을 할 때 함수에 인자를 안 넣었거나 잘못된 인자를 넣었을 때 뭐가 문제인지 알 수 없어서 시간을 많이 소모한 경험을 떠올려 봤을 때, TS가 가져올 장점이 무엇일지 희미하지만 감이 온다. 변수의 타입을 확정하고 명시해놓음으로써 휴먼 에러를 찾는 데 도움이 될 거고, 함수에 뭐가 들어가고 뭐가 나오는지 등이 명확해져서 코드 읽기도 편해질 것 같다.

간단한 예제를 돌려봤을 때만 해도 편할 거 같다는 느낌이 왔는데, 본격적으로 사용하면 어떨지 기대가 된다.

컴파일이란?

  • 내가 쓴 코드를 컴퓨터가 이해할 수 있는 row-level 수준으로 번역하는 과정이다.

런타임이란?

  • 내가 쓴 코드가 실제로 실행되는 순간을 말한다.
profile
⛰ 프론트엔드 개발 공부 블로그

0개의 댓글