λ°˜μ‘ν˜•

TypeScript? πŸ€”

2012λ…„ λ§ˆμ΄ν¬λ‘œμ†Œν”„νŠΈκ°€ λ°œν‘œν•œ νƒ€μž…μŠ€ν¬λ¦½νŠΈ(TypeScript)λŠ” 
μžλ°”μŠ€ν¬λ¦½νŠΈ(JavaScript)λ₯Ό 기반으둜 정적 νƒ€μž… 문법을 μΆ”κ°€ν•œ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μž…λ‹ˆλ‹€.

νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ νŠΉμ§•

컴파일 μ–Έμ–΄, 정적 νƒ€μž… μ–Έμ–΄

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 동적 νƒ€μž…μ˜ 인터프리터 μ–Έμ–΄λ‘œ λŸ°νƒ€μž„μ—μ„œ 였λ₯˜λ₯Ό λ°œκ²¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이에 λ°˜ν•΄ νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” 정적 νƒ€μž…μ˜ 컴파일 언어이며 νƒ€μž…μŠ€ν¬λ¦½νŠΈ 컴파일러 λ˜λŠ” 바벨(Babel)을 톡해 μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œλ‘œ λ³€ν™˜λ©λ‹ˆλ‹€.

μ½”λ“œ μž‘μ„± λ‹¨κ³„μ—μ„œ νƒ€μž…μ„ 체크해 였λ₯˜λ₯Ό 확인할 수 있고 미리 νƒ€μž…μ„ κ²°μ •ν•˜κΈ° λ•Œλ¬Έμ— μ‹€ν–‰ 속도가 맀우 λΉ λ₯΄λ‹€λŠ” μž₯점이 μžˆμŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ μ½”λ“œ μž‘μ„± μ‹œ 맀번 νƒ€μž…μ„ κ²°μ •ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— 번거둭고 μ½”λ“œλŸ‰μ΄ μ¦κ°€ν•˜λ©° 컴파일 μ‹œκ°„μ΄ 였래 κ±Έλ¦°λ‹€λŠ” 단점이 μžˆμŠ΅λ‹ˆλ‹€.

 

μžλ°”μŠ€ν¬λ¦½νŠΈ μŠˆνΌμ…‹(Superset)

νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ μŠˆνΌμ…‹, 즉 μžλ°”μŠ€ν¬λ¦½νŠΈ κΈ°λ³Έ 문법에 νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ 문법을 μΆ”κ°€ν•œ μ–Έμ–΄μž…λ‹ˆλ‹€. λ”°λΌμ„œ μœ νš¨ν•œ μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ μž‘μ„±ν•œ μ½”λ“œλŠ” ν™•μž₯자λ₯Ό .jsμ—μ„œ .ts둜 λ³€κ²½ν•˜κ³  νƒ€μž…μŠ€ν¬λ¦½νŠΈλ‘œ μ»΄νŒŒμΌν•΄ λ³€ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° 지원

νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” ES6(ECMAScript 6)μ—μ„œ μƒˆλ‘­κ²Œ μ‚¬μš©λœ 문법을 ν¬ν•¨ν•˜κ³  있으며 클래슀, μΈν„°νŽ˜μ΄μŠ€, 상속, λͺ¨λ“ˆ λ“±κ³Ό 같은 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° νŒ¨ν„΄μ„ μ œκ³΅ν•©λ‹ˆλ‹€.

 

컴파일 λ‹¨κ³„μ—μ„œμ˜ μ—λŸ¬ 체크

높은 μˆ˜μ€€μ˜ μ½”λ“œ 탐색과 디버깅
νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” μ½”λ“œμ— λͺ©μ μ„ λͺ…μ‹œν•˜κ³  λͺ©μ μ— λ§žμ§€ μ•ŠλŠ” νƒ€μž…μ˜ λ³€μˆ˜λ‚˜ ν•¨μˆ˜λ“€μ—μ„œ μ—λŸ¬λ₯Ό λ°œμƒμ‹œμΌœ 버그λ₯Ό 사전에 μ œκ±°ν•©λ‹ˆλ‹€. λ˜ν•œ μ½”λ“œ μžλ™μ™„μ„±μ΄λ‚˜ μ‹€ν–‰ μ „ ν”Όλ“œλ°±μ„ μ œκ³΅ν•˜μ—¬ μž‘μ—…κ³Ό λ™μ‹œμ— 디버깅이 κ°€λŠ₯ν•΄ 생산성을 높일 수 μžˆμŠ΅λ‹ˆλ‹€. μ‹€μ œλ‘œ ν•œ 연ꡬ에 λ”°λ₯΄λ©΄ λͺ¨λ“  μžλ°”μŠ€ν¬λ¦½νŠΈ λ²„κ·Έμ˜ 15%κ°€ 사전에 νƒ€μž…μŠ€ν¬λ¦½νŠΈλ‘œ 감지할 수 μžˆλ‹€κ³  ν•©λ‹ˆλ‹€.

 

μžλ°”μŠ€ν¬λ¦½νŠΈ ν˜Έν™˜

νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ™€ 100% ν˜Έν™˜λ©λ‹ˆλ‹€. λ”°λΌμ„œ ν”„λ‘ νŠΈμ—”λ“œ λ˜λŠ” λ°±μ—”λ“œ μ–΄λ””λ“  μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ‚¬μš©ν•  수 μžˆλŠ” 곳이라면 νƒ€μž…μŠ€ν¬λ¦½νŠΈλ„ μ“Έ 수 μžˆμŠ΅λ‹ˆλ‹€. νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” μ•±κ³Ό 웹을 κ΅¬ν˜„ν•˜λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ™€ λ™μΌν•œ μš©λ„λ‘œ μ‚¬μš© κ°€λŠ₯ν•˜λ©° μ„œλ²„ λ‹¨μ—μ„œ 개발이 μ΄λ£¨μ–΄μ§€λŠ” λ³΅μž‘ν•œ λŒ€ν˜• ν”„λ‘œμ νŠΈμ—μ„œλ„ 빛을 λ°œν•©λ‹ˆλ‹€.

 

Why typescript?

  • μ½”λ“œμ˜ 버그 κ°μ†Œ
  • λŸ°νƒ€μž„ μ—λŸ¬ κ°μ†Œ
  • 생산성 ν–₯상

βœ”οΈ μ‹€μ œλ‘œλŠ” 이해할 수 μ—†μ§€λ§Œ, javascriptμ—μ„œλŠ” λ‹Ήμ—°ν•˜κ²Œ ν—ˆμš©μ΄ λ˜λŠ” μ˜ˆμ‹œ

 

[Example 1]
Array + Boolean이 String이 λ˜λŠ” ν˜„상 (이λ₯Ό κ°œλ°œμžκ°€ μ˜λ„ν•˜κ³  ν–ˆλ‹€λ©΄ μΈμ •, ν•˜μ§€λ§Œ κ·ΈλŸ° κ°œλ°œμžκ°€ μžˆλŠ”κ°€..?πŸ€”)

  [1,2,3,4] + false
  -> '1,2,3,4false'

 

[Example 2]
ν•΄λ‹Ή μ˜ˆμ œμ—μ„œλŠ” 컴퓨터와 κ°œλ°œμžκ°€ μ†Œν†΅ν•˜λŠ” κ³Όμ •μ—μ„œ μ»΄ν“¨ν„°λŠ” a와 bκ°€ μ •ν™•νžˆ μ–΄λ–€ 것인지 λͺ¨λ₯Έλ‹€.
λ”°λΌμ„œ μ‚¬μš©μžκ°€ μ–΄λ–»κ²Œ 값을 보내도 μ»΄ν“¨ν„°λŠ” 이λ₯Ό μ²˜λ¦¬ν•΄μ€˜μ•Όν•˜λŠ” 상황이 μƒκΈ°λ‹€λ³΄λ‹ˆ 인자λ₯Ό 1개만 보내도, μˆ«μžκ°€ μ•„λ‹Œ 문자λ₯Ό 보내도 ν—ˆμš©ν•΄μ£Όκ³  μžˆλŠ” μ΄μƒν•œ ν˜„μƒμ΄ μΌμ–΄λ‚˜κ³  μžˆλ‹€.
ν•˜μ§€λ§Œ NaNμ΄λΌλŠ” λ¦¬ν„΄μ„ λ°›κ³  μžˆκ³ , μ½”λ“œμ— μ—λŸ¬κ°€ μ—†λŠ” μ±„λ‘œ μ§„행이 λ˜κΈ°μ— ν”„λ‘œμ νŠΈκ°€ μ»€μ§ˆμˆ˜λ‘ μš°λ¦¬λŠ” μ–΄λ””μ„œ λ¬Έμ œκ°€ λ°œμƒν•œμ§€ μ•ŒκΈ° μ–΄λ €μ›Œμ§„λ‹€.

  function divide(a, b) {
    return a / b;
  }

  divide("abc");
  -> NaN

 

[Example 3]
컴파일 λ‹¨κ³„μ—μ„œ νŒŒμ•…ν•  μˆ˜ μ—†κ³ , λŸ°νƒ€μž„ λ‹¨κ³„μ—μ„œ μ—λŸ¬κ°€ λ‚˜λŠ” μ΅œμ•…μ˜ κ²½μš°λ₯Ό κ²½ν—˜ ν•  μˆ˜ μžˆλ‹€.

  const obj = {
    name: "kw",
    sayHello: (name) => console.log(`hello ${name}`)
  };
  obj.sayHello(obj.name);
  -> hello kw

  obj.asyHello(obj.name);
  -> VM137:2 Uncaught TypeError: obj.asyHello is not a function
    at <anonymous>:2:7

πŸ‘‰ λ”°λΌμ„œ 이런 행동이 μ΄μƒν•˜μ§€ μ•Šλƒκ³  κ°œλ°œμžμ—κ²Œ javascriptκ°€ μ•Œλ €μ€„ ν•„μš”κ°€ μžˆλ‹€.

 

 

[좜처]
https://www.samsungsds.com/kr/insights/typescript.html

https://radixweb.com/blog/typescript-vs-javascript

λ°˜μ‘ν˜•