TIL. typescript basic

Teasan·2021년 6월 14일
0

typescript

목록 보기
1/13
post-thumbnail

이 노트는 드림코딩의 [타입스크립트 + 객체지향 프로그래밍 마스터] 강의를 base로 작성되었습니다.

dynamically typed VS statically typed

프로그래밍 언어는 프로그램의 타입을 분석(타입을 언제 결정하느냐와 같은)하는 방식을 기준으로 크게 둘로 나뉜다. 바로 프로그램이 실제로 실행될 때(동작할 때)에 타입 분석을 진행하는 dynamically typed language(동적인 타입 언어), 그리고 프로그램을 실행해보지 않고도 런타임 이전에 타입 분석을 진행하는 statically typed language(정적인 타입 언어)이 바로 그것이다.

dynamically typed language

동적으로 타입이 결정되는 경우를 생각해보자. 보통 변수를 선언하면서 숫자를 할당했다가도 그 뒤에 다시 문자열을 재할당할 수도 있다. 컴파일 시간에도 큰 문제가 없고, 런타임 시간에는 변수가 어떤 것이 할당되냐에 따라서 동적으로 타입이 결정이 된다.

우리가 작성한 코드를 프로그램 형태로 동작하기 위해서는 그 프로그램이 동작하는 환경에서 이해할 수 있는 언어나 또는 바이너리 형태로 변환해주는 작업을 거쳐야 한다. 이것이 바로 컴파일러이다.

statically typed language

정적인 타입은 어떨까? 변수를 선언할 때 타입을 반드시 명시해서 작성을 해야한다. 그리고 한 번 결정된 타입은 절대 바꿀 수 없다. 타입을 선언한 이후에 다른 타입으로 할당하게 된다면 컴파일 시간(내가 코딩을 할 때)에 바로 경고 메세지를 받아볼 수가 있다. 이처럼 정적인 타입은 타입을 조금 더 엄격하게 관리해준다.

이렇듯 정적 타입 시스템은 프로그램이 실행되기 전에 많은 오류를 잡아낼 수 있다. 같은 종류의 오류라도 동적 타입 언어에서는 실제 배포가 일어날 때까지 오류가 발견되지 않는 경우가 많다.

JS는 어떤 타입의 언어일까? 바로 dynamically typed(동적인 타입)의 언어이다. 이는 프로그래밍이 동작할 때 실시간으로 타입이 결정이 된다는 뜻이다. 앞서 설명했듯이 dynamically typed은 보통 런타임 환경에서 에러가 발생되는 단점이 있다.

물론, JS도 엄밀히 말하면 객체지향 프로그래밍 언어이다. 프로토타입(Prototype)을 베이스로 구현할 수 있기 때문이다. constructor functions를 이용하면 클래스를 이용해서 오브젝트를 만들 수 있으나, 이 자체 만으로는 강력한 객체지향 프로그래밍을 하기가 어렵다. (ECMA6 표준에서 Class 문법이 추가되었으나 이는 JS가 클래스 기반으로 바뀌었다는 이야기가 아니며, 이 추가된 class 만으로는 생각보다 많은 것들을 할 수 없다.)

> 프로토타입(Prototype)에 대한 개념은 나중에 한번 더 정리할 예정이다.

타입을 걱정하지 않고 빠르게 코딩할 수 있는 동적인 언어인 이 자바스크립트는 바로 이 타입이 없기 때문에, 가독성이 매우 떨어진다. 무엇보다도, 동적인 언어로 개발을 할 때 이슈를 사전에 발견하지 못하고 그대로 배포하게 되어 개발자로서 상상조차 하기 싫은 최악의 시나리오.. 바로 사용자가 나의 어플리케이션을 사용할 때 에러가 나는 상황을 맞닥뜨릴 수 있다.

타입스크립트는 몇가지의 치명적인 단점을 가진 JS에 타입을 더해줌으로써 statically typed(정적인 타입)으로 만들어준다. 컴파일 시간에 타입에 관련된 에러를 잡게해주며, 이는 런타임 환경에서 일어날 번한 에러를 사전에 방지하는 중요한 역할을 해준다.

그렇다면 이제 타입스크립트에 대해서도 설명이 필요하겠다.

TypeScript 타입스크립트란?

타입스크립트는 자바스크립트를 한 단계 감싸는 언어이다. 그렇기에 자바스크립트가 동작하는 어떤 체제에서도 타입스크립트를 사용할 수 있다. 타입스크립트 컴파일러는 확장자만 바꾸면, 혹은 확장자를 바꾸지 않고도 JS 코드를 이해할 수 있다. 즉, 완전히 새로운 프로그래밍 언어가 아니라 JS를 베이스로 하는 Superset of JS 라고 이해하면 될 것이다.

타입스크립트는 다른 클래스를 베이스로한 객체지향 프로그래밍처럼 class, interface, generics, types! 를 이용할 수 있다. 이를 통해 더 막강한 객체지향 프로그래밍이 가능해졌다.

타입스크립트를 이용하게 되면 현재 이용가능한 자바스크립트 문법 뿐만 아니라, 미래에 만들어지는 새로운 문법이나 자바스크립트에는 없는 그 이상의 것으로 코딩을 가능하게 해주며 또 모든 브라우져에서 호환도 가능해졌다.

자바스크립트가 동작하는 어떤 곳에서도 대체해서 사용 가능한 이 타입스크립트는, 클라이언트 사이드 뿐만 아니라 서버 사이드에서 자바스크립트 런타임 환경이 존재하는 어떤 곳에서도 사용이 가능하다.

물론, 이것들이 가능한 이유는 타입스크립트 코드를 그대로 쓸 수 있기 때문이 아니라, 타입스크립트를 transcompiles 해서 자바스크립트로 변환하기 때문이다. (이 transcompiles는 타입스크립트 툴 자체에서 제공되는 컴파일러나, 바벨을 이용한다.)

이러한 특징 때문에 타입스크립트만으로 프로젝트를 진행해도 되며, 자바스크립트 프로젝트가 있다면 새로 추가하는 파일만 타입스크립트로 작성하더라도 기존의 자바스크립트 파일을 점진적으로 타입스크립트로 변환해서 진행할 수도 있다.

결국, 이 모든 것은 타입스크립트 코드가 자바스크립트 코드로 컴파일이 되기 때문에 가능한 일일 것이다.

그래서 왜 TypeScript 타입스크립트인가?

이유 1. TYPE

자바스크립트는 프로그래밍이 동작할 때 타입이 결정되기 때문에 배포 후에도 에러가 발생할 수 있는 단점이 있다고 앞서 지겹게 설명했다. 반면, 타입스크립트는 정적으로 결정되는 즉 코딩을 할 때 타입이 결정되므로 코딩할 때 즉각적으로 타입에러를 받아볼 수 있다고도 지겹게 설명했다. 다른 말로 설명하자면, 타입스크립트를 사용하면 상대적으로 안정성을 보장 받을 수 있다는 뜻이 된다.

타입스크립트를 사용함으로써 안정성을 보장받고, 확장도 쉬운 소프트웨어를 만들 수 있다.

이유 2. 강력한 객체지향 프로그래밍, OOP

OOP(Object-Oriented Programming)는 Modern Programming Paradigm 으로 알려져 있다.

객체를 위주로 프로그래밍 해나가는 이 OOP는 객체 위주로 모듈성 있는 코드를 작성할 수 있기에 재사용성이 높다. 또한 객체 단위로 확장해 나갈 수 있는 확장성이 크고 이것들을 바탕으로 기존 코드에 문제 해결이나 새로운 기능을 추가할 때 보다 쉽게 유지보수를 가능하게 해준다.

객체지향 프로그래밍의 원칙들을 따라서 코딩을 하게 되면 높은 생산성의 프로그래밍이 가능하고 퀄리티의 높은 코드를 완성할 수 있으며, 기존의 이슈를 수정하거나 새로운 기능을 추가하는 것이 보다 쉬워진다. 또 다수의 개발자들과 함께 협업을 해나가는 프로젝트에서라면 이 객체지향 프로그래밍을 통해 제품을 보다 빠르게 완성할 수 있다.

앞서 설명한 두가지 이유 말고도 타입스크립트를 사용해야 하는 이유는 많다.

자바스크립트에 정적 타이핑을 도입한 Elm이나 Reason, PureScript 등과 같은 언어를 생각해보자. 이 언어들은 자바스크립트와 상당히 이질적인 문법을 가지며, 이러한 접근법은 몇가지의 명백한 단점을 보여준다.

  1. 기존 자바스크립트 코드베이스의 마이그레이션이 비싸진다. 이질적인 문법 때문에 기존의 프로젝트를 다시 작성해야 하는 문제가 생긴다.
  2. 자바스크립트 프로그래머가 체감하는 학습 난이도가 높아진다.
  3. 서드파티 자바스크립트 패키지의 사용이 어려워진다.

반면, 타입스크립트는 수 많은 기존의 자바스크립트 코드 베이스와 자바스크립트 생태계와의 포용을 가장 큰 우선순위로 두고 시작한 언어이다. 이러한 접근법을 통해 앞서 말한 단점과 반대되는 장점이 생긴다.

  1. 기존 자바스크립트 코드 베이스의 마이그레이션 비용이 저렴해진다. (기존의 코드를 처음부터 뒤집어 엎을 필요가 없다.)
  2. 자바스크립트 프로그래머가 체감하는 학습 난이도가 낮아진다.
  3. 서드 파티 자바스크립트 패키지의 사용이 상대적으로 수월하다.

또한, 많은 개발자들이 사용하는 VS Code의 개발팀은 타입스크립트 개발환경을 개선할 만한 강력한 타입스크립트 툴링을 가지고 있다. 개발자가 VS Code를 사용한다면, 타입스크립트 언어로 개발할 때 상대적으로 유용할 것이다.

무엇보다도 타입스크립트는 양과 질 모두 검증된 커뮤니티를 갖고 있다. 이는 개발자라면 솔깃한 이야기가 아닐 수 없다. (내가 고민하고 있는 문제를 이 활발한 커뮤니티 안에서의 누군가는 더 나은 방법으로 해결했을 가능성이 높아질테니!)

타입스크립트는 컴파일링할 때 어떤 버전으로 컴파일 할 것인지 설정이 가능하다. 모든 브라우저 위에서 동작 가능한 어플리케이션을 만들고, 최신 문법과 필수적인 원칙을 지킴으로써 보다 더 재밌는 코딩을 할 수 있도록 만들어 준다.

타입스크립트의 등장으로 자바스크립트에서 보장받을 수 없었던 타입을 보장 받고, 이를 통해 더 안정적인 소프트웨어를 만들 수 있게 되었다. 또한, 강력한 객체지향 프로그래밍을 가능하게 해준다. 이러한 많은 장점들을 이유로 타입스크립트는 다수의 개발자 및 회사가 선택하여 사용하고 있는 인기 언어가 되었다.

참조


자바스크립트 개발자를 위한 타입스크립트
Javascript : 프로토타입(prototype)의 이해
[Javascript ] 프로토타입 이해하기

출처 :
이 포스팅은 드림코딩의 [타입스크립트+객체지향 프로그래밍 마스터 과정] 강의를 기반으로 작성했습니다. https://academy.dream-coding.com/

profile
일단 공부가 '적성'에 맞는 개발자. 근성있습니다.

0개의 댓글