
* 자바스크립트 초 뉴비가 작성한 글입니다, 부족한 점 및 잘못된 내용은 언제나 지적 환영입니다.
현재 부스트캠프 웹 풀스택을 진행중에 있고, 언어는 자바스크립트를 기본으로 사용하고 있다. 그러나 많은 캠퍼들이 자바스크립트가 아닌 타입스크립트로 전환해서 사용하고 있었다. 근래들어 타입스크립트를 많이 사용한다고만 알고 있었는데 두 언어의 차이점은 무엇인지 알아보고, 내가 전환해야할 이유들도 작성해보려 한다.
타입스크립트란? 그리고 자바스크립트의 특징

타입스크립트는 기본적으로 자바스크립트 기반의 언어이다. 그리고 가장 다른점은 '타입' 의 검사이다. 타입스크립트는 타입의 명시를 필수로 하며, 그 검사를 엄격하게 수행한다.
자바스크립트를 사용할 때는 따로 타입을 명시하지 않아도 되고, 검사도 수행하지 않는다. 따라서 이와 관련한 에러는 코드르 작성할 때 캐치해주지 않는다. 아래 예를 보자.
const multiply = (a, b) => {
return a * b;
}
우리가 이와 같이 두 파라미터를 받으면 그 곱셈값을 반환하는 함수를 선언했다고 하자. 일반적으로는 a와 b로 숫자가 들어가겠지만 문자열이 들어가도, 심지어 파라미터가 들어가지 않아도 자바스크립트는 에러를 알려주지 않는다.
multiply(1, 2); // 우리가 의도한 경우
// 그러나
multiply('abc', 'def'); // 이런 경우도
multiply(); // 이런경우도 오류가 나지 않는다.
위와 같이 자바스크립트는 타입을 따로 명시하지 않기에 검사하지도 않고, 알지도 못한다. 이러한 '높은 유연성' 이 자바스크립트의 큰 특징 중 하나이다. 추가적으로 타입을 따로 검사하지 않기에 아래와 같은 행동도 가능하다.
let a = 'This is string';
a = 5;
처음에는 문자열로 선언했던 변수에 정수형을 넣을 수 있다. 타입을 검사하는 언어라면 불가능하겠지만 자바스크립트는 이를 허용한다. (예시에는 없지만 다이나믹 타이핑이라는 자동으로 형 변환을 해주는 기능도 존재한다.)
자바스크립트가 지니는 유연성 및 자유성의 장/단점
<장점>
위와 같은 유연성은 생산성에서 큰 장점이 된다. 만약 타입을 검사하는 언어였다면 위 코드양은 2배가 되었을 것이다.
그리고 생산성이 좋다는 건 그만큼 빠르게 코딩이 가능하다는 의미이다. 시간과 생산성은 돈에 직결되는 요소다.
<단점>
유연성, 자유도가 높다는것은 의도하지 않은대로 작성해도 프로그램이 실행된다는 것을 의미한다. 그리고 이러한 결과는 결국 '런타임 에러' 로 귀결된다. 런타임때 에러가 났다는 것은 이미 서비스 또는 프로그램이 릴리즈 된 이후의 에러기 때문에 대처하기가 굉장히 까다롭다. 큰 문제로 연결될 가능성이 높다는 것이다.
무조건 타입스크립트가 베스트인가?
당연히 아니다, 위의 장점에도 적어놨듯이 자바스크립트의 생산성은 무시할 수 없다. 그리고 반대로 타입스크립트는 타입을 검사하기 때문에 코드 작성에 있어서 양도 많고, 그만큼 피로도도 증가한다는 단점이 있다. 아래는 타입스크립트로 작성한 곱셈 함수이다.
const multiply = (a:number, b:number) => {
return a * b;
}
그러나 이러한 생산성 보다는 치명적인 오류로 이어질 수 있는 유연성들이 주는 함정들 때문에 타입스크립트를 많이 선호하는게 아닌가 싶다. 그리고 프로젝트 규모가 커질수록 사람이 실수할 확률이 높아지기 때문에 타입을 확실히 명시해서 컴파일 단계에서 오류를 잡는것이 더 효율적이라고 생각한다.
나도 필요성을 느꼈다.
API를 작성하는데 GET요청으로 쿼리스트링을 활용하여 파라미터를 받아오는 일이 있었다. 이 때, 숫자값을 받아들여서 백엔드에서 로직을 처리하는데 형태만 숫자지, 실제로는 문자열이었다. ('2023' 과 같은)
허나 난 사실을 간과하고 (사실 잘 몰랐음), 숫자가 들어가야하는 공간에 이 값을 그대로 사용하였다.
당연히 런타임때 에러가 발생했고, 에러를 찾는데 꽤나 시간이 걸렸던 기억이 있다. 이 때 자바스크립트의 유연성에 대한 위험성을 느꼈고, 타입스크립트로의 전환을 생각하게 되었다.
물론 그 외에도 클래스나 인터페이스를 지원하는 등 추가적인 문법도 종종 봐왔기에 매력적이라고 생각했다. 아직은 타입스크립트만이 지니는 문법이나 특징들을 잘 알지는 못하지만 사용해보면서 느껴보려 한다.
'개발' 카테고리의 다른 글
MSA 아키텍쳐란? (0) | 2023.09.28 |
---|---|
쿠키 / 세션 / 토큰(JWT) 의 차이는? (0) | 2023.09.27 |
[Typescript] Path alias (import 경로 단축) (0) | 2023.09.19 |
CSR, SSR 이란 (0) | 2023.09.02 |
슬랙 알람 봇 만들고 배포하기 [JAVA / SPRING BOOT] (0) | 2023.08.28 |