1์žฅ

  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ปดํŒŒ์ผ๊ณผ ์‹คํ–‰์ด ์ด๋ค„์ง‘๋‹ˆ๋‹ค.

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์™€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ด€๊ณ„ ์ดํ•ดํ•˜๊ธฐ

notion image
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ๋ถ€๋ถ„ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค.
  • js ๋˜๋Š” jsx ํŒŒ์ผ์„ ts, tsx๋กœ ๋ฐ”๊พผ๋‹ค๊ณ  ๋‹ฌ๋ผ์ง€๋Š” ์ ์€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์— ์—„์ฒญ๋‚œ ์ด์ ์ด ๋ฉ๋‹ˆ๋‹ค.
  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์ด์ง€๋งŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. (ํƒ€์ž…์„ ๋ช…์‹œํ•˜๋Š” ์ถ”๊ฐ€์ ์ธ ๋ฌธ๋ฒ•๋“ค)
notion image
  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ํƒ€์ž… ์ฒดํฌ๋ฅผ ํ†ตํ•ด ๋ฌธ์ œ์ ์„ ์ฐพ์•„์ค๋‹ˆ๋‹ค. (ํƒ€์ž… ์ถ”๋ก ์„ ์ด์šฉํ•ด์„œ)
    • ํƒ€์ž…์— ๋”ฐ๋ฅธ ๋ฉ”์„œ๋“œ
    • ๊ฐ์ฒด์˜ ํ‚ค๊ฐ’ (์–ด๋А์ชฝ์ด ์˜คํƒ€์ธ์ง€๋Š” ํŒ์ •ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.)
  • ๋ช…์‹œ์ ์ธ ํƒ€์ž… ์„ ์–ธ์œผ๋กœ (interface or type) ์ž ์žฌ์  ๋ฌธ์ œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.
notion image
  • ํƒ€์ž…์ฒด์ปค๋ฅผ ํ†ต๊ณผํ•œ ํ”„๋กœ๊ทธ๋žจ๋„ ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋‹ค๊ณ  ํŒ๋‹จ๋˜๋Š” ๊ฒฝ์šฐ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ ์ด๋ฅผ ํ‘œ์‹œํ•จ
  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ํƒ€์ž…์— ์ดˆ์ ์„ ๋งž์ถ”๊ณ  ์ •ํ™•์„ฑ์€ Reason, Elm ๊ฐ™์€ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋‚ฌ๋‹ค.
 

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์„ค์ • ์ดํ•ดํ•˜๊ธฐ

์„ค์ •์„ ์œ„ํ•ด์„œ๋Š”โ€ฆ
  1. ์ปค๋งจ๋“œ ๋ผ์ธ
    1. tsc --noImplicitAny program.ts
  1. tsconfig.json (tsc โ€”init ์‹คํ–‰)
    1. { "CompilerOptions": { "noImplicitAny": true } }
  • noImplicitAny - ์•”์‹œ์  any ํƒ€์ž…์œผ๋กœ ๊ฐ„์ฃผ๋˜๋Š” ๊ฒƒ์„ ๋ง‰์Šต๋‹ˆ๋‹ค.
  • strickNullChecks - null or undefined ๊ฐ€ ํ—ˆ์šฉ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•ด์ฃผ๋Š” ์„ค์ •
    • ๋ช…์‹œ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ์œ ๋‹ˆ์–ธ์„ ํ™œ์šฉํ•ด number | null ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์Œ
    • ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด?
      • null check, or ๋‹จ์–ธ๋ฌธ(assertion) ์ถ”๊ฐ€
        notion image
      • strickNullChecks ์‚ฌ์šฉํ•˜๋ ค๋ฉด noImplicitAny๋ฅผ ๋จผ์ € ์„ค์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
      • ์ด ๋‘๊ฐœ๋ฅผ ๋ชจ๋‘ ์ฒดํฌํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด strict๋ฅผ ์„ค์ •ํ•˜์ž
 

์ฝ”๋“œ ์ƒ์„ฑ๊ณผ ํƒ€์ž…์ด ๊ด€๊ณ„์—†์Œ์„ ์ดํ•ดํ•˜๊ธฐ

  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์—ญํ• 
    • ์ตœ์‹  ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ/์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ๋ฒ„์ „์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ํŠธ๋žœ์ŠคํŒŒ์ผ
    • ์ฝ”๋“œ์˜ ํƒ€์ž… ์˜ค๋ฅ˜๋ฅผ ์ฒดํฌ
  • ํƒ€์ž… ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ์ฝ”๋“œ๋„ ์ปดํŒŒ์ผ์ด ๊ฐ€๋Šฅ
    • ํƒ€์ž… ์ฒดํฌ์™€ ๋…๋ฆฝ์ด๊ธฐ์— ์ปดํŒŒ์ผ์ด ๊ฐ€๋Šฅ
    • C๋‚˜ ์ž๋ฐ”๋Š” ์ปดํŒŒ์ผ๊ณผ ํƒ€์ž…์ฒดํฌ๊ฐ€ ๋™์‹œ์— ์ด๋ค„์ง
    • ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ๋•Œ ์ปดํŒŒ์ผํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด tsconfig.json์— noEmitOnError๋ฅผ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ๋นŒ๋“œ ๋„๊ตฌ์— ๋™์ผํ•˜๊ฒŒ ์ ์šฉํ•˜๋ฉด ๋œ๋‹ค.
  • ๋Ÿฐํƒ€์ž„์—๋Š” ํƒ€์ž… ์ฒดํฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅ
    • ํ•ด๊ฒฐ๋ฒ• ์†์„ฑ ์กด์žฌ๋ฅผ ์ฒดํฌ
    • ํƒœ๊ทธ ๊ธฐ๋ฒ•: ๋Ÿฐํƒ€์ž„์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ํƒ€์ž… ์ •๋ณด๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•
    • ํƒ€์ž…(๋Ÿฐํƒ€์ž„ ์ ‘๊ทผ ๋ถˆ๊ฐ€)๊ณผ ๊ฐ’(๋Ÿฐํƒ€์ž„ ์ ‘๊ทผ ๊ฐ€๋Šฅ)์„ ๋‘˜๋‹ค ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํƒ€์ž…์„ ํด๋ž˜์Šค๋กœ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค.
      • ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํƒ€์ž…์œผ๋กœ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ํด๋ž˜์Šค๋กœ ์„ ์–ธํ•˜๋ฉด ํƒ€์ž…๊ณผ ๊ฐ’์œผ๋กœ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํƒ€์ž… ์—ฐ์‚ฐ์€ ๋Ÿฐํƒ€์ž„์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.
    • ํƒ€์ž… ๋‹จ์–ธ๋ฌธ as number ์€ ํƒ€์ž… ์—ฐ์‚ฐ์œผ๋กœ ๋Ÿฐํƒ€์ž„ ๋™์ž‘์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • ํƒ€์ž…์„ ์ฒดํฌํ•˜๊ณ  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์—ฐ์‚ฐํ•˜์—ฌ ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•ด์•ผ ๊ฐ’์„ ์ •์ œํ•  ์ˆ˜ ์žˆ์Œ
      • notion image
  • ๋Ÿฐํƒ€์ž„ ํƒ€์ž…์€ ์„ ์–ธ๋œ ํƒ€์ž…๊ณผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค.
    • ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ์„ ํ†ตํ•ด ๋ฐ›์€ ๊ฐ’์„ ํ•จ์ˆ˜์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋Ÿฐํƒ€์ž„์—์„œ๋Š” ํƒ€์ž…์ด ๋งž์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ
  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํƒ€์ž…์œผ๋กœ๋Š” ํ•จ์ˆ˜๋ฅผ ์˜ค๋ฒ„๋กœ๋“œํ•  ์ˆ˜ ์—†๋‹ค.
    • C++ ๊ฐ™์€ ์–ธ์–ด๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋งŒ ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ๋ฒ„์ „์˜ ํ•จ์ˆ˜๋ฅผ ํ—ˆ์šฉ, ํƒ€์ž… ์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ์€ ๋ถˆ๊ฐ€
    • ํƒ€์ž… ์ˆ˜์ค€์˜ ์˜ค๋ฒ„๋กœ๋”ฉ๋งŒ ์ง€์›, ์—ฌ๋Ÿฌ๊ฐœ์˜ ํƒ€์ž… ์„ ์–ธ๋ฌธ์„ ์ž‘์„ฑํ• ์ˆ˜ ์žˆ์œผ๋‚˜ ๊ตฌํ˜„์ฒด๋Š” ํ•˜๋‚˜ ๋ฟ
  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํƒ€์ž…์€ ๋Ÿฐํƒ€์ž„ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Œ
    • ํƒ€์ž…๊ณผ ํƒ€์ž… ์—ฐ์‚ฐ์ž๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ณ€ํ™˜ ์‹œ์ ์—์„œ ์ œ๊ฑฐ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ํ–ฅ์ด ์—†๋‹ค.
    • ๋Ÿฐํƒ€์ž„์—๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์—†์œผ๋‚˜ ์ปดํŒŒ์ผ๋Ÿฌ ๋นŒ๋“œํƒ€์ž„์—๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์žˆ์Œ, ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํฌ๋‹ค๋ฉด transpile only๋ฅผ ์ฒดํฌ
    • ํ˜ธํ™˜์„ฑ๊ณผ ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ณผ์ •์—์„œ๋„ ํƒ€์ž…๊ณผ๋Š” ๋ฌด๊ด€ํ•จ

๊ตฌ์กฐ์  ํƒ€์ดํ•‘ ์ต์ˆ™ํ•ด์ง€๊ธฐ

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋• ํƒ€์ดํ•‘ ๊ธฐ๋ฐ˜, ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์ด ๋ชจ๋‘ ์ œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค๋ฉด ๊ทธ ๊ฐ’์ด ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์–ด์กŒ๋Š”์ง€ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๊ณ  ์‚ฌ์šฉ
  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ด๋ฅผ ๋ชจ๋ธ๋งํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ์กฐ์  ํƒ€์ดํ•‘์„ ์ง€์›
  • ์–ด๋–ค ํƒ€์ž… ์„ ์–ธ๊ณผ ๊ตฌ์กฐ๊ฐ€ ๊ฐ™๋‹ค๋ฉด ๊ด€๊ณ„๋ฅผ ์„ ์–ธํ•˜์ง€ ์•Š์•„๋„ ํ•จ์ˆ˜๊ฐ€ ๋™์ž‘ํ•จ ์ด๋ฅผ ๊ตฌ์กฐ์  ํƒ€์ดํ•‘์ด๋ผ๊ณ ํ•จ
  • ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ์  ํƒ€์ดํ•‘ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ๋„ํ•จ
  • ์–ด๋–ค ํ•จ์ˆ˜ ์•ˆ์—์„œ ์„ ์–ธ๋˜๋Š” ๋ณ€์ˆ˜, ์ถ”๊ฐ€์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” ์ •๋ณด๋กœ ์ž˜๋ชป๋œ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ
  • ํด๋ž˜์Šค์—์„œ๋„ ๊ตฌ์กฐ์  ํƒ€์ดํ•‘์„ ๋”ฐ๋ฆ„ ์ธ์Šคํ„ด์Šค๊ฐ€ ์˜ˆ์ƒ๊ณผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ทธ๋Ÿผ์—๋„ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ์—๋Š” ๊ตฌ์กฐ์  ํƒ€์ดํ•‘์ด ์œ ๋ฆฌํ•˜๋‹ค

any ํƒ€์ž… ์ง€์–‘ํ•˜๊ธฐ

  • ํƒ€์Šค์˜ any๋ฅผ ํ†ตํ•ด ์ ์ง„์ ์ด๊ณ  ์„ ํƒ์ ์ด๋‹ค.
  • any ํƒ€์ž…์—๋Š” ํƒ€์ž… ์•ˆ์ „์„ฑ์ด ์—†๋‹ค.
  • any๋Š” ํ•จ์ˆ˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ๋ฌด์‹œํ•œ๋‹ค.
  • any ํƒ€์ž…์—๋Š” ์–ธ์–ด ์„œ๋น„์Šค๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.
    • ์‹ฌ๋ฒŒ์— ํƒ€์ž…์ด ์žˆ๋‹ค๋ฉด ์ž๋™์™„์„ฑ๊ณผ ์ ์ ˆํ•œ ๋„์›€๋ง์„ ์ œ๊ณตํ•œ๋‹ค.
    • ํŽธ์ง‘๊ธฐ์˜ Rename Symbol์„ ํด๋ฆญํ•ด์„œ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ด€๋ จ๋œ ๋‚ด์šฉ์„ ํ•œ๋ฒˆ์— ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • any ํƒ€์ž…์€ ์ฝ”๋“œ ๋ฆฌํŒฉํ„ฐ๋ง ๋•Œ ๋ฒ„๊ทธ๋ฅผ ๊ฐ์ถฅ๋‹ˆ๋‹ค.
    • any๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์žก์„ ์˜ค๋ฅ˜๋„ ๋†“์นœ๋‹ค~
  • any๋Š” ํƒ€์ž… ์„ค๊ณ„๋ฅผ ๊ฐ์ถ˜๋‹ค
    • ์„ค๊ณ„๊ฐ€ ๋ณด์ด๋„๋ก ๊ตฌ์ฒด์ ์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค
  • any๋Š” ํƒ€์ž…์‹œ์Šคํ…œ์˜ ์‹ ๋ขฐ๋„๋ฅผ ๋–จ์–ด๋œจ๋ฆฐ๋‹ค.