ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TS에 λŒ€ν•œ κ³ λ―Όκ³Ό μ£Όκ΄€ (feat.μ›ν‹°λ“œ μ±Œλ¦°μ§€)
    🫐 TypeScript 2023. 2. 27. 13:44

    (μ–΄λ– ν•œ μ½”λ©˜νŠΈλ˜ ν™˜μ˜μž…λ‹ˆλ‹€!)

     

     

    🫐 κ²½ν—˜μ„ ν†΅ν•œ 곡뢀


    λͺ‡ 달 μ „ νƒ€μž…μŠ€ν¬λ¦½νŠΈ κ³΅λΆ€ν•˜λ©°  JSν”„λ‘œμ νŠΈλ₯Ό TS둜 λ¦¬νŽ™ν„°λ§μ„ ν–ˆμ—ˆλ‹€. λ¦¬νŒ©ν„°λ§ ν•  λ‹Ήμ‹œ 인풋과 아웃풋을 κ°•μ œν•  수 μžˆλ‹€! λŠ” 점은 κ²½ν—˜ν–ˆμ§€λ§Œ λŒ€λ‹€μˆ˜μ˜ 기업이 μ±„νƒν•œ κΈ°μˆ μ΄λΌκΈ°μ—” μŠ€μŠ€λ‘œκ°€ μ„€λ“λ λ§Œν•œ νš¨κ³ΌλŠ” μ•„λ‹ˆμ—ˆλ‹€.

    (μ§€κΈˆ 돌이켜보면 νƒ€μž…μ„ λ„μž…ν•΄ μ—λŸ¬λ§Œ 잠재우기 κΈ‰κΈ‰ν•˜μ˜€κ³ , μˆ˜μ •ν•˜μ§€ μ•Šμ•„μ•Ό ν•  λΆ€λΆ„κΉŒμ§€ μˆ˜μ •ν•˜λŠ” 잘λͺ»μ„ λ²”ν–ˆλ‹€λŠ” 것을 κΉ¨λ‹¬μ•˜λ‹€. νƒ€μž…μ„ μ„€κ³„λ‘œ ν•΄μ„ν•˜λŠ” 관점이 λ‹Ήμ‹œμ—λŠ” μ—†μ—ˆκΈ° λ•Œλ¬Έμ΄λ‹€.)

    TS에 μ™œ κ·Έλ ‡κ²Œ μ—΄κ΄‘ν•˜λŠ”μ§€ 직접 κ²½ν—˜ν•˜κ³  μ‹Άλ‹€λŠ” 생각 ν•˜μ— μ›ν‹°λ“œ 1,2μ›” μ±Œλ¦°μ§€μ— μ°Έμ—¬ν•˜κ²Œ λ˜μ—ˆκ³ , ν•¨κ»˜ νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ„œμ μ„ ν•¨κ»˜ κ³΅λΆ€ν•˜λ©° λ§Žμ€ ‘λ†€λžŒ’ λͺ¨λ¨ΌνŠΈλ₯Ό κ²½ν—˜ν–ˆλ‹€. κ·Έ κ²½ν—˜κ³Ό κ·Έ κ³Όμ •μ—μ„œ ν–ˆλ˜ 고민듀을 κ³΅μœ ν•˜λŠ” ν¬μŠ€νŒ…μ„ μž‘μ„±ν•΄λ³΄λ € ν•œλ‹€.

     

     

    🫐 λ„ꡬ듀 μ΄ν•΄ν•˜λŠ” μƒˆλ‘œμš΄ μ ‘κ·Ό: μ„€λ“μ˜ 과정을 보라!


    2μ°¨ μ›ν‹°λ“œ ν”„λ¦¬μ˜¨λ³΄λ”© μ±Œλ¦°μ§€μ™€ ν•¨κ»˜ λŸ¬λ‹ νƒ€μž…μŠ€ν¬λ¦½νŠΈ 책을 읽으며 도ꡬλ₯Ό μ΄ν•΄ν•˜λŠ” μƒˆλ‘œμš΄ μ‹œκ°μ„ κ°–κ²Œ λ˜μ—ˆλ‹€.

    TSκ°œλ°œμžλ“€μ€ JS개발자λ₯Ό λ‹€μŒ 3κ°€μ§€ νŠΉμ„± λ•Œλ¬Έμ— ‘TSλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€!’라고 μ„€λ“ν•œλ‹€.

    • μ‹ λ’°ν•  수 μžˆλŠ” κ²°κ³Ό(A Result you can Trust)
      TS νŒŒμΌμ„ μ»΄νŒŒμΌν•˜λ©΄ νƒ€μž…μ΄ μ €μž₯된 파일 (d.ts)κ³Ό JS λ¬Έλ²•μœΌλ‘œ 컴파일된 파일(JS) 두 κ°œκ°€ μƒμ„±λœλ‹€. λ˜ν•œ νƒ€μž… 였λ₯˜κ°€ ν¬ν•¨λœ index.ts νŒŒμΌμ„ μ»΄νŒŒμΌν–ˆμ„ λ•Œ 이상 없이 index.jsκ°€ μƒμ„±λœλ‹€. 컴파일된 JS νŒŒμΌλ§ŒμœΌλ‘œλ„ νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ μž‘λ™ 방식을 μ „ν˜€ λ³€κ²½μ‹œν‚€μ§€ μ•ŠλŠ”λ‹€. μ΄λŠ” κΈ°μ‘΄ μžλ°”μŠ€ν¬λ¦½νŠΈ κ°œλ°œμžλ“€μ„ Typescript둜 μ‰½κ²Œ λ„˜μ–΄μ˜€κ²Œ μ„€λ“ν•˜κΈ° μœ„ν•œ 방법이라 보인닀.

    • μŠ€μΌ€μΌλ§ν•΄λ„ μ•ˆμ „ν•¨(Safety at Scale)
      μžλ°” || C++와 같은 정적 νƒ€μž… μ–Έμ–΄λŠ” μΆ©λŒν•  수 μžˆλ‹€κ³  νŒλ‹¨λ˜λ©΄ μ½”λ“œ μ‹€ν–‰ 자체λ₯Ό κ±°λΆ€ν•œλ‹€. ν•˜μ§€λ§Œ JSλŠ” 좩돌 κ°€λŠ₯성을 λ¨Όμ € ν™•μΈν•˜μ§€ μ•Šκ³  μ‹€ν–‰λΆ€ν„° ν•œλ‹€. 이 λ§₯λ½μ—μ„œ TSλ₯Ό μ‚¬μš©ν•˜λ©΄ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜κΈ° μ „ νŽΈμ§‘κΈ° μ°¨μ›μ—μ„œ μ˜ˆμƒ κ°€λŠ₯ν•œ 였λ₯˜λ₯Ό 미리 μ•Œλ €μ£Όμ–΄ 컴파일 이전 λ‹¨κ³„μ—μ„œ 였λ₯˜λ₯Ό μž‘μ•„λ‚Ό 수 μžˆλ‹€. ν•œλ‘ 달 μ „ κΈ°μ‘΄ JS ν”„λ‘œμ νŠΈλ₯Ό TS둜 λ¦¬νŒ©ν„°λ§ ν•˜κΈ°λ‘œ λ§ˆμŒλ¨Ήμ—ˆμ—ˆκ³ , κ·Έ κ³Όμ •μ—μ„œ λŠλ‚€ 이점과 λ™μΌν–ˆλ‹€. 뢈과 λͺ‡ 달 μ „ JS둜 μž‘μ„±λœ μ½”λ“œλ₯Ό 정적 뢄석 없이 μ΄ν•΄ν•˜λŠ”λ° μ†Œμš”λ˜λŠ” μ‹œκ°„μ΄ κ½€λ‚˜ μ˜¬λ ΈκΈ°μ— 고생을 ν–ˆλ‹€. 섀계λ₯Ό 보고 μ‰½κ²Œ μ½”λ“œλ₯Ό 이해할 수 μžˆλ‹€.

    • μžλ°”μŠ€ν¬λ¦½νŠΈ ν˜Ήμ€ κ·Έ 이상 (JavaScript and More)
      λ‚΄λΆ€μ μœΌλ‘œ VSCode도 TS둜 개발된 만큼, VSCodeλŠ” TS와 같이 μ‚¬μš© κ°€λŠ₯ν•œ ν›Œλ₯­ν•œ νŽΈμ§‘κΈ°μ΄λ‹€. μžλ™μ™„μ„±, λ‚΄μž₯ νƒ€μž… 체컀 λ“±

    TSλ₯Ό μ‚¬μš©ν•˜λ©΄μ„œ μ‚¬μš©ν–ˆλ˜ κΈ°λŠ₯이 μœ„ 섀득을 μœ„ν•΄ λ§Œλ“€μ–΄μ‘Œλ‹€λŠ” 이해λ₯Ό ν–ˆκ³ , TSκ°€ κΈ°μ‘΄ JS κ°œλ°œμžλ“€μ„ μ„€λ“ν•˜κΈ° μœ„ν•΄ ꡉμž₯ν•œ 곡을 듀인 λ„κ΅¬λΌλŠ” 생각이 λ“€μ—ˆλ‹€.

     

     

    🫐 μ •말 TS의 μžμœ λ„μ™€ ν†΅μ œκΆŒμ€ Trade-off일까?


    μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” λΉ λ₯΄κ³  μœ μ—°ν•˜λ‹€. νƒ€μž…μŠ€ν¬λ¦½νŠΈλ₯Ό μ‚¬μš©ν•˜λ©΄μ„œ 이 μœ μ—°μ„±μ΄ ꡬ쑰와 νƒ€μž…μ— μ–½λ§€μ΄λŠ” 것 κ°™λ‹€λŠ” λŠλ‚Œμ„ λ°›μ•˜λ‹€. μ €λ²ˆ λ‹¬κΉŒμ§€λ§Œ 해도 TSλΌλŠ” λ„κ΅¬λŠ” μžμœ λ„λ₯Ό 빼앗은 λŒ€μ‹  μš°λ¦¬μ—κ²Œ ν†΅μ œκΆŒμ„ λ„˜κ²¨μ€€ μ–Έμ–΄λΌλŠ” 생각이 λ“€μ—ˆμ§€λ§Œ, μ§€κΈˆμ€ 생각이 쑰금 λ°”λ€Œμ—ˆλ‹€.

    • TSλŠ” μ–΄λ– ν•œ λ””μžμΈ νŒ¨ν„΄μ΄λ‚˜ μ•„ν‚€ν…μ²˜λ₯Ό λ”°λ₯΄λ˜, κ·Έ ꡬ쑰λ₯Ό μ²˜μŒλΆ€ν„° λ§Œλ“€μ–΄ λ‚˜κ°ˆ 수 μžˆλ‹€.
    • μ–΄λ–€ μ½”λ“œλ₯Ό λ³€κ²½ν•  λ•Œ, κ·Έ λ³€κ²½λœ μ½”λ“œμ™€ λ³€κ²½λœ μ½”λ“œλ‘œ 인해 변경이 λ˜μ–΄μ•Ό ν•  μ½”λ“œκ°€ λͺ…μ‹œμ μœΌλ‘œ 뢄리해 주기에 μ½”λ“œ 변경에 μžμœ λ„λ₯Ό μ€€λ‹€.

    였히렀 μš°λ¦¬μ—κ²Œ μ›ν•˜λŠ” κ²°κ³Όλ₯Ό μ•ˆμ •μ μœΌλ‘œ λ„μΆœν•  수 있게 ν•΄ μ£Όκ³ , μ•ˆμ „ν•œ κ²°κ³Όλ₯Ό 얻을 수 μžˆλ‹€λŠ” 확신을 μ€€λ‹€. λ”°λΌμ„œ TSλŠ” 자유λ₯Ό μ œν•œν•˜λŠ” μ–Έμ–΄κ°€ μ•„λ‹ˆλΌ, μ œν•œμ„ 톡해 자유λ₯Ό μ£ΌλŠ” μ–Έμ–΄ (ν˜Ήμ€ 도ꡬ)라고 μž¬μ •μ˜ ν•˜κ³  μ‹Άλ‹€!

     

     

    🫐 κ·Έλž˜μ„œ νƒ€μž…μŠ€ν¬λ¦½νŠΈκ°€ 뭔데?


    JS -> TS λ¦¬νŒ©ν„°λ§ ν”„λ‘œμ νŠΈ λ‹Ήμ‹œμ—λŠ” λ‹€λ“€ λ§ν•˜λŠ” “νƒ€μž… μ•ˆμ •μ„±”μ΄λΌλŠ” νš¨κ³Όκ°€ 크게 와닿지 μ•Šμ•˜λ‹€.

    이번 μ±Œλ¦°μ§€λ₯Ό 톡해 νƒ€μž…μŠ€ν¬λ¦½νŠΈλ₯Ό “섀계” κ΄€μ μ—μ„œ 보며 “νƒ€μž… μ•ˆμ •μ„±”μ΄λΌλŠ” νš¨κ³Όκ°€ μ™€λ‹Ώμ•˜λ˜ 것 κ°™λ‹€.

    μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ 일반 ν•¨μˆ˜λ₯Ό λ§Œλ“€ λ•Œλ₯Ό 생각해 보면, ν•¨μˆ˜κ°€ λ°›μ•„μ˜€λŠ” 인풋과 아웃풋은 ν•¨μˆ˜λ₯Ό μƒμ„±ν•˜λŠ” λ‹Ήμ‹œ 개발자의 사고에 따라 μœ μ—°ν•˜κ²Œ λ³€κ²½ν•  수 μžˆλ‹€. 즉, κ°œλ°œμžμ—κ²Œ 큰 μžμœ λ„λ₯Ό μ£ΌλŠ” 언어이닀.

    μ΄λ•Œ νƒ€μž…μŠ€ν¬λ¦½νŠΈλ‘œ λ™μΌν•œ ν•¨μˆ˜λ₯Ό λ§Œλ“œλŠ” 과정을 “섀계” κ΄€μ μ—μ„œ 바라본닀면, κ°œλ°œμžκ°€ λ°›μ•„μ˜¬ 인풋과 μ•„μ›ƒν’‹μ˜ μƒκΉ€μƒˆλ₯Ό 미리 μ„€κ³„ν•œ ν›„ → κ·Έ 섀계에 λ§žμΆ”μ–΄ ν•¨μˆ˜λ₯Ό λ§Œλ“€κ²Œ λœλ‹€. 즉, νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” κ°œλ°œμžμ—κ²Œ 섀계에 λ§žλŠ” κ°œλ°œμ„ κ°•μ œν•˜λŠ” ν†΅μ œκΆŒμ„ λΆ€μ—¬ν•˜λŠ” 도ꡬ, κ·Έ ν†΅μ œκΆŒμœΌλ‘œ 자유λ₯Ό μ£ΌλŠ” λ„κ΅¬λ‘œ 해석할 수 μžˆλ‹€κ³  μƒκ°ν•œλ‹€.

     

     

    🫐 Interface와 Type alias의 본질적인 κ³ λ―Ό


    μœ μ‚¬ν•œ 효과λ₯Ό λ‚΄λŠ” 각 방식을 μ–Έμ œ μ‚¬μš©ν•΄μ•Ό ν• μ§€λ₯Ό 각각이 μ„ μ–Έλ˜λŠ” λ°©μ‹μ˜ 차이에 λŒ€μž…ν•΄ κ³ λ―Όν•΄ λ³΄μ•˜λ‹€.

    νƒ€μž…κ³Ό μΈν„°νŽ˜μ΄μŠ€κ°€ μ„ μ–Έλ˜λŠ” 방식에 차이가 μžˆλ‹€. InterfaceλŠ” 객체λ₯Ό μ‚¬μš©ν•˜κ³ , Type aliasλŠ” νƒ€μž…μ„ λ³€μˆ˜μ²˜λŸΌ ν• λ‹Ήν•œλ‹€.

    type Name = __
    interface Name {}
    

    λ‚΄κ°€ μ •μ˜ν•˜λŠ” κ°μ²΄λŠ” μ„Έμƒμ˜ λ³΅μž‘μ„±μ„ κ°„λ‹¨νžˆ ν‘œν˜„ν•˜λŠ” 방식이닀. Interfaceλ₯Ό 객체의 κ΄€μ μ—μ„œ 바라본닀면, λ‹€μŒμ˜ 객체의 νŠΉμ„±μ΄ ν•„μš”ν•œ μ‹œμ , κ·Έλ•Œκ°€ λ°”λ‘œ Interfaceλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•  μ‹œμ μ΄λΌκ³  μƒκ°ν•œλ‹€.

    • 상속이 κ°€λŠ₯ν•œ [상속]
    • μ—¬λŸ¬ ν˜•νƒœλ‘œ μž¬κ΅¬μ„±μ΄ κ°€λŠ₯ν•œ [λ‹€ν˜•μ„±]
    • 본질적인 곡톡적 νŠΉμ„±λ§Œ 보아 캑슐둜 λ§Œλ“  [좔상화]
    • λ³΅μž‘μ„±μ„ λ‹¨μˆœν™”ν•œ [μΊ‘μŠν™”] - DRY (Don’t repeat yourself! λ¬΄μ˜λ―Έν•œ λ°˜λ³΅μ€ κΈˆκΈ°μ‹œ)

     

    λ°˜λ©΄μ—, Type aliasλŠ” “λͺ¨λ“ ” λ³€μˆ˜, 객체, ν•¨μˆ˜, ν΄λž˜μŠ€μ— 할당이 κ°€λŠ₯ν•˜λ‹€.

    클래슀 νŠΉμ„±μ΄ ν•„μš”ν•œ μ‹œμ , ꡬ쑰적인 섀계도λ₯Ό μž‘μ„±ν•˜λŠ” μΈ‘λ©΄μ—μ„œλŠ”, Interfaceλ₯Ό, κ·Έ μ™Έ λ³€μˆ˜μ²˜λŸΌ μ‚¬μš©λ˜μ–΄μ•Ό ν•˜λŠ” κ²½μš°μ—λŠ” Type aliasλ₯Ό μ‚¬μš©ν•˜λŠ” 게 쒋을 것 κ°™λ‹€. (λ¬Όλ‘  ν˜„μ—…μ—μ„œ μ •ν•΄μ§„ ν•©μ˜κ°€ μžˆλ‹€λ©΄ λ”°λ₯΄λŠ” 걸둜 ^,^)

     

     

    (μ•„λž˜μ—λŠ” μ›ν‹°λ“œ ν”„λ¦¬μ˜¨λ³΄λ”© μ±Œλ¦°μ§€ κ³Όμ • μ§„ν–‰ν–ˆλ˜ 과제λ₯Ό 정리해 λ³΄μ•˜μŠ΅λ‹ˆλ‹€.)

    🫐 Day 1


    TS λ“±μž₯ μ „, μžλ°”μŠ€ν¬λ¦½νŠΈ ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜, λ°˜ν™˜κ°’, ꡬ성 μš”μ†Œλ₯Ό μ„€λͺ…ν•˜λŠ” ν‘œμ€€ν™”λœ λ‚΄μš©μ„ μœ„ν•΄μ„œ 주석을 달기 μœ„ν•΄ μ‚¬μš©ν•˜λŠ” JSDoc을 μ±„νƒν–ˆλ‹€κ³  λ“€μ—ˆλ‹€.

    첫 번째 과제둜, μš”κ΅¬ 사항에 λ§žμΆ”μ–΄ To Do 리슀트λ₯Ό μ„ μ–ΈλΆ€λ§Œ κ΅¬ν˜„ν•˜λ©°, JSDoc의 typedef / property / optional property νƒœκ·Έλ₯Ό μ‚¬μš©ν•΄ ν•¨μˆ˜λ₯Ό κ΅¬ν˜„ν•˜κΈ° μ „ νƒ€μž…μ— λŒ€ν•œ 힌트λ₯Ό μ λŠ” μ—°μŠ΅μ„ ν•˜μ˜€λ‹€.

     

    GitHub - Yeonny0723/wanted-pre-onboarding-challenge-fe-2

    Contribute to Yeonny0723/wanted-pre-onboarding-challenge-fe-2 development by creating an account on GitHub.

    github.com

    • λŠλ‚€ 점
      • 'νƒ€μž… μ•ˆμ •μ„±'의 효과λ₯Ό '섀계'의 κ΄€μ μ—μ„œ λŠλ‚„ 수 μžˆμ—ˆλ‹€.
      • ν•˜μ§€λ§Œ, μ„€λͺ…λ§Œ ν•  뿐, 잘λͺ»λœ μ½”λ“œλ₯Ό 막을 μˆ˜λŠ” μ—†μ—ˆκ³ ,
      • λ¦¬νŒ©ν† λ§ κ³Όμ •μ—μ„œ 더 이상 μœ νš¨ν•˜μ§€ μ•Šμ•„ μ§„ μ„€λͺ…을 μΆ”μ ν•˜κ³  λ³€κ²½ν•΄μ£Όμ–΄μ•Ό ν•˜λŠ” 뢀뢄이 λΉ„νš¨μœ¨ μ μ΄μ—ˆλ‹€. 
      • λ˜ν•œ λ³΅μž‘ν•œ 객체λ₯Ό μ„€λͺ…ν•˜κΈ° μ–΄λ ΅κ³ , κ·Έ 관계λ₯Ό μ„€λͺ…ν•˜κΈ° μœ„ν•΄μ„œ 독립적인 λ‹€μˆ˜μ˜ 주석이 ν•„μš”ν–ˆλ‹€. 

     

     

    🫐 Day 2


    JSDoc의 ν•¨μˆ˜ μ„€λͺ…μ„œμ— 따라 νƒ€μž…μ„ μ„€κ³„ν•˜λŠ” μ—°μŠ΅μ„ ν•˜μ˜€λ‹€.

     

    GitHub - Yeonny0723/wanted-pre-onboarding-challenge-fe-2

    Contribute to Yeonny0723/wanted-pre-onboarding-challenge-fe-2 development by creating an account on GitHub.

    github.com

    • λŠλ‚€ 점

    νƒ€μž… μ •μ˜μ™€ κ΄€λ ¨λœ μ£Όμš” 문법을 μ‚΄νŽ΄λ³΄λ©΄μ„œ νƒ€μž…μŠ€ν¬λ¦½νŠΈμ— νƒ€μž… 지정에 λ‹€μ–‘ν•œ 문법이 μžˆλ‹€λŠ” 것을 μ•Œμ•˜κ³ , μ΅μˆ™ν•΄μ§ˆ 수 μžˆλ„λ‘ μ—¬λŸ¬ μ˜ˆμ‹œλ₯Ό μ‚΄νŽ΄λ³΄κ³  μ—°μŠ΅ν•΄ λ³Ό ν•„μš”κ°€ μžˆλ‹€κ³  λŠκΌˆλ‹€.

     

     

    🫐 Day 3


    νƒ€μž…μ„ μ„€κ³„ν•œ λŒ€λ‘œ κ΅¬ν˜„ν•˜λŠ” μ—°μŠ΅μ„ ν•˜μ˜€λ‹€.

     

    GitHub - Yeonny0723/wanted-pre-onboarding-challenge-fe-2

    Contribute to Yeonny0723/wanted-pre-onboarding-challenge-fe-2 development by creating an account on GitHub.

    github.com

     

    • λŠλ‚€ 점

    TSλ₯Ό ꡬ쑰적인 μΈ‘λ©΄, 집합둠적인 μΈ‘λ©΄μ—μ„œ μƒˆλ‘­κ²Œ 이해해 λ³΄λŠ” 관점을 μ–»μ—ˆλ‹€.

     

    A. TS의 ꡬ쑰적 관점 (덕 타이핑, ꡬ쑰적 타이핑)

    νƒ€μž…μŠ€ν¬λ¦½νŠΈ κ°œλ°œμžλ“€μ€ λͺ…μ‹œμ  타이핑을 ν†΅ν•œ μ—„κ²©ν•œ νƒ€μž… 체크가 μ•„λ‹Œ (집합을 μΈμ •ν•˜λŠ”) ꡬ쑰적 타이핑을 ν†΅ν•œ νƒ€μž… 체크λ₯Ό μ„ νƒν–ˆλ‹€. μ™œμΌκΉŒ? μ•„λ§ˆ κΈ°μ‘΄ JS κ°œλ°œμžλ“€μ΄ λ°›μ•„λ“€μ΄κΈ°μ—λŠ” μ’€ 더 μœ μ—°ν•œ νƒ€μž… 체킹이 ν•„μš”ν–ˆκΈ° λ•Œλ¬Έμ΄λΌκ³  μƒκ°ν–ˆμ§€ μ•Šμ•˜μ„κΉŒ μ‹Άλ‹€.

    ν•˜μ§€λ§Œ 이 νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ νƒ€μž… 체킹 μ‹œμŠ€ν…œμ΄ κ°œλ°œμžμ—κ²Œ νŽΈλ¦¬ν•¨μ„ 쀄 λ•Œλ„ μžˆμ§€λ§Œ, κ°œλ°œμžκ°€ μ˜ˆμƒν•˜μ§€ λͺ»ν•œ κ³³ (λŸ°νƒ€μž„)μ—μ„œ 버그λ₯Ό μΌμœΌν‚¬ μˆ˜λ„ μžˆλ‹€.

    type Human = {
    		name: string
    }
    
    type Animal = {
    		name: string
    }
    
    function getName(obj: Animal){ // Animal을 λ„£λ˜ Human을 λ„£λ˜ ꡬ쑰가 λ™μΌν•˜κΈ°μ— 문제 μ—†μŒ.
    	return obj.name
    }
    

    κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 이 TS의 νƒ€μž… 체킹 μ‹œμŠ€ν…œμ„ 잘 이해해 컴파일러의 νƒ€μž… 체킹 κ²°κ³Όλ₯Ό μ˜ˆμΈ‘ν•˜λ©° μ½”λ“œλ₯Ό μž‘μ„±ν•΄μ•Όκ² λ‹€λŠ” 생각이 λ“€μ—ˆλ‹€.

     

    B. TS의 집합둠적인 관점

    이 κ΄€μ μ—μ„œ νƒ€μž…μ€ ν•˜λ‚˜μ˜ 집합이닀.

    • λͺ¨λ“  νƒ€μž…μ€ 집합일 λΏμ΄μ§€λ§Œ νƒ€μž… 간에도 계측이 μ‘΄μž¬ν•˜κ³ , 
    • νƒ€μž… κ°„μ˜ κ΄€κ³„λŠ” νŠΉμ • κ΄€κ³„λ‘œ μ„ μ–Έλ˜μ—ˆλŠ”μ§€ μ—¬λΆ€κ°€ μ•„λ‹Œ ν¬ν•¨λœ 속성에 μ˜ν•΄ κ²°μ •ν•œλ‹€.
    • μ„œλΈŒ νƒ€μž…(ν•˜μœ„ νƒ€μž…)은 슈퍼 νƒ€μž…(μƒμœ„ νƒ€μž…)에 ν• λ‹Ήν•  수 μžˆλ‹€.
    type Human = {
    		name: string
    }
    
    type Animal = {
    		name: string
    }
    
    type HumanAnima = Human extends Animal ? true : false // true. Human이 더 λ²”μš©μ μ΄κΈ°μ— μ–˜κ°€ 더 μƒμœ„ νƒ€μž…μ΄λ‹€.
    

     

     

    🫐 Day 4.


    Typescript-exercises 문제λ₯Ό 1-9λ²ˆκΉŒμ§€ ν’€λ©° μš”κ΅¬μ‚¬ν•­μ„ κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ μ–΄λ–€ νƒ€μž… μ—λŸ¬κ°€ λ°œμƒν•˜μ˜€κ³ , μ–΄λ–»κ²Œ ν•΄κ²°ν•  수 μžˆλŠ”μ§€ κΈ°λ‘ν•˜λŠ” κ³Όμ œμ˜€λ‹€.

    • 과제 링크 (원본 λ¬Έμ œλŠ” 파일 컀밋 history에 μžˆμŠ΅λ‹ˆλ‹€)

    Union νƒ€μž…, νƒ€μž… κ°€λ“œ, Type Predicate (νƒ€μž… λͺ…μ œ), Partial & Omitκ³Ό 같은 Util νƒ€μž…μ„ μ—°μŠ΅ν•˜κ³  μ μš©ν–ˆλ‹€.

     

    GitHub - Yeonny0723/wanted-pre-onboarding-challenge-fe-2

    Contribute to Yeonny0723/wanted-pre-onboarding-challenge-fe-2 development by creating an account on GitHub.

    github.com

    (! 문제 풀이에 λŒ€ν•œ μ„€λͺ…은 μΆ”ν›„ ν¬μŠ€νŒ…μ—μ„œ λ‹€λ£° μ˜ˆμ •!)

     

     

     

     

     

     

     

    μ•žμœΌλ‘œ ν•  일:

    논리에 κΈ°λ°˜ν•œ 일가견: https://techblog.woowahan.com/9804/

    관심사 뢄리: https://www.youtube.com/watch?v=KEDUqA9JeIo&t=1212s

    버전 μ—…λ°μ΄νŠΈμ—μ„œ κΌ­ 읽어야 ν•  사항: Breaking Changes (이전 버전과 ν˜Έν™˜λ˜μ§€ μ•ŠλŠ” λΆ€λΆ„)

    Discussion ⇒ Issue ⇒ PR ⇒ Code Review ⇒ Merge → SEMVer ⇒ Release 흐름을 μ§€ν‚€λ©° 개발

    κΎΈμ€€νžˆ 가섀을 μ„Έμš°κ³  → μˆ˜λ¦½ν•˜κ³  → κ²€μ¦ν•˜κ³  → μ‹€ν˜„ν•˜λŠ” κ³Όμ •μ˜ 반볡

    RealWorld λ§Œλ“€κΈ° μ—°μŠ΅: https://github.com/pocojang/nuxt-realworld

    라이브러리 뢄석: https://github.com/axios/axios

    Type hierarchy: https://www.zhenghao.io/posts/type-hierarchy-tree

     

     

    참고자료: https://typescript-kr.github.io/pages/tutorials/ts-for-the-new-programmer.html

    https://velog.io/@bbaa3218/TypeScript-독학-7-μ΄νŽ™ν‹°λΈŒ-νƒ€μž…μŠ€ν¬λ¦½νŠΈ

Designed by Tistory.