Skip to content

Latest commit

Β 

History

History

07-robust-with-types-flexible-with-polymorphism

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
Β 
Β 
Β 
Β 
Logo

νƒ€μž…μœΌλ‘œ κ²¬κ³ ν•˜κ²Œ λ‹€ν˜•μ„±μœΌλ‘œ μœ μ—°ν•˜κ²Œ

πŸ“ λͺ©μ°¨


1μž₯. νƒ€μž… 검사 훑어보기

p3. νƒ€μž…μ€ ν”„λ‘œκ·Έλž¨μ— μ‘΄μž¬ν•˜λŠ” κ°’(value)듀을 κ·Έ λŠ₯λ ₯에 따라 λΆ„λ₯˜ν•œ 것이닀. 🌡

  • 튜브: μ–΄λ–€ νƒ€μž…μ„ 가진 값은 κ·Έ νƒ€μž…μ—κ²Œ κΈ°λŒ€ν•˜λŠ” 일을 ν•œλ‹€.

p8. 아무리 기술이 λ°œμ „ν•˜κ³  λŒ€λ‹¨ν•œ μ²œμž¬κ°€ λ‚˜μ™€λ„ 이런 νƒ€μž… 검사기λ₯Ό μ ˆλŒ€ λ§Œλ“€ 수 μ—†λ‹€λŠ” 사싀이 λ…Όλ¦¬μ μœΌλ‘œ 이미 증λͺ…λ˜μ–΄ μžˆλ‹€. μ΄λŠ” 무렀 1930λ…„λŒ€μ— μ»΄ν“¨ν„°μ˜ 아버지 튜링이 직접 증λͺ…ν•œ 사싀이닀. 🐧

p26. νƒ€μž… 검사기가 a ? b : cλ₯Ό 검사할 λ•ŒλŠ” a의 계산 κ²°κ³Όλ₯Ό μ „ν˜€ κ³ λ €ν•˜μ§€ μ•ŠλŠ”λ‹€. aκ°€ 아무리 κ°„λ‹¨ν•œ λΆ€ν’ˆμ΄λ”λΌλ„ 말이닀. '계산 κ²°κ³Όλ₯Ό μ ˆλŒ€ μ•Œμ•„λ‚΄λ € ν•˜μ§€ μ•ŠλŠ”λ‹€'λŠ” νƒ€μž… κ²€μ‚¬μ˜ 원칙은 λ‹€λ₯Έ λͺ¨λ“  λΆ€ν’ˆμ—λ„ λ˜‘κ°™μ΄ μ μš©λœλ‹€. πŸŒ΅πŸ‹

  • 샐리 : νˆ΄μ—μ„œ ν•΄μ£Όλ˜ 뢀뢄이라 λ‹Ήμ—°ν•˜λ‹€κ³  μƒκ°ν•˜μ—¬ ν•œλ²ˆλ„ 생각해보지 μ•Šμ•˜λ˜ 뢀뢄이닀. νƒ€μž…λ§Œ ν™•μΈν•˜λ©΄ λœλ‹€λŠ” 생각을 μ™œ λͺ»ν–ˆμ„κΉŒ?

p47. νƒ€μž… ν‘œμ‹œλŠ” 'μ ˆλŒ€λ‘œ 낑지 μ•ŠλŠ” 주석'인 μ…ˆμ΄λ‹€. πŸŒ΅πŸ‹

  • 튜브: 주석은 μ½”λ“œλ₯Ό μ΄ν•΄ν•˜λŠ” 데 도움을 μ£ΌλŠ”λ°, μ½”λ“œ μ‹€ν–‰κ³Ό κ΄€λ ¨ μ—†λ‹€ λ³΄λ‹ˆ μ½”λ“œμ™€ λ§€μΉ­λ˜μ§€ μ•Šμ„ 수 μžˆλ‹€. νƒ€μž… ν‘œμ‹œλŠ” μ‹€ν–‰ λ‹¨κ³„μ—μ„œ κ±ΈλŸ¬μ§€λ‹ˆ μ½”λ“œλ₯Ό μ„€λͺ…ν•΄ μ£Όλ©΄μ„œλ„ 낑을 μˆ˜κ°€ μ—†λ‹€.
  • 샐리: 주석은 λˆ„κ΅°κ°€κ°€ ν‹€λ Έλ‹€κ³  μ•Œλ €μ£Όμ§€ μ•Šμ§€λ§Œ, νƒ€μž…ν‘œμ‹œλ₯Ό 해두면 νƒ€μž…μ΄ ν‹€λ Έλ‹€κ³  μ•Œλ €μ£ΌκΈ° λ•Œλ¬Έμ— 훨씬 μ’‹λ‹€κ³  μƒκ°ν•œλ‹€. λŒ€κ·œλͺ¨μ˜ ν”„λ‘œμ νŠΈμ—μ„œ 동적언어λ₯Ό μ“΄λ‹€λ©΄ λ”μš±λ” νƒ€μž… ν‘œμ‹œκ°€ ν•„μš”ν•œ 것 κ°™λ‹€.

p50. νƒ€μž… 좔둠은 μƒλž΅λœ νƒ€μž… ν‘œμ‹œλ₯Ό 볡ꡬ할 뿐이닀. νƒ€μž… ν‘œμ‹œλ₯Ό μƒλž΅ν•˜λŠ” 거지, νƒ€μž… 검사λ₯Ό μƒλž΅ν•˜λŠ” 게 μ•„λ‹ˆλ‹€. 즉, νƒ€μž… 검사 쀑에 μƒλž΅λœ λ§€κ°œλ³€μˆ˜ νƒ€μž…μ— ν•΄λ‹Ήν•˜λŠ” νƒ€μž…μ„ 찾을 수 μžˆμ–΄μ•Ό ν•œλ‹€. πŸ§πŸ‹

  • νŽ­κ·„: 동적 μ–Έμ–΄κ°€ νƒ€μž…μ΄ μ—†λŠ”κ²Œ μ•„λ‹ˆλΌ μ‹€ν–‰ν•˜κΈ° 직전에 νƒ€μž…μ„ μΆ”λ‘ ν•΄μ„œ νƒ€μž…μ„ λ„£μ–΄μ€€λ‹€λŠ” 것. 이걸 처음 κΉ¨λ‹¬μ•˜λ‹€.

p55. μ•žμ—μ„œ νƒ€μž…μ€ 'ν”„λ‘œκ·Έλž¨μ— μ‘΄μž¬ν•˜λŠ” 값듀을 κ·Έ λŠ₯λ ₯에 따라 λΆ„λ₯˜ν•œ 것'이라 ν–ˆλ‹€... κ·ΈλŸ¬λ―€λ‘œ μ–΄λ–€ μ–Έμ–΄μ—μ„œλŠ” νƒ€μž… 였λ₯˜λΌ λ³Ό 수 μ—†μ—ˆλ˜ 버그가 λ‹€λ₯Έ μ–Έμ–΄μ—μ„œλŠ” νƒ€μž… 였λ₯˜κ°€ λ˜λŠ” 것이닀. πŸ‹

  • 샐리: λ¦¬ν„°λŸ΄μ΄ κ·Έ λŠ₯λ ₯에 따라 λΆ„λ₯˜λœ κ²ƒμ΄λΌλŠ” 말이 μΆ©κ²©μ μ΄μ—ˆλ‹€. μ‹€μ œμ„Έκ³„μ—μ„œ λ¬ΈμžλŠ” 문자둜, μˆ«μžλŠ” 숫자둜 ν‘œν˜„ν•˜κΈ° λ•Œλ¬Έμ— λ¦¬ν„°λŸ΄ κ°„μ˜ 차이가 μƒκ²¨λ‚œ 것이 μ•„λ‹ˆκ³ , μ–΄λ– ν•œ 역할에 μ˜ν•΄ λΆ„λ₯˜λ˜μ—ˆλ‹€λŠ” 것이 μ‹ κΈ°ν–ˆλ‹€.

p57. 결과적으둜 νƒ€μž…μ΄λΌλŠ” κ°œλ…μ˜ μœ μ—°ν•¨μ€ μ–Έμ–΄ μ„€κ³„μžμ™€ κ°œλ°œμžμ—κ²Œ μ—¬λŸ¬ 선택지λ₯Ό μ œκ³΅ν•œλ‹€. 값을 λΆ„λ₯˜ν•˜λŠ” 방법에 따라 μ–΄λ–€ 였λ₯˜κ°€ νƒ€μž… 였λ₯˜κ°€ 될 μˆ˜λ„ 있고 그렇지 μ•Šμ„ μˆ˜λ„ μžˆλ‹€. μ–Έμ–΄ μ„€κ³„μžκ°€ 개발자의 μžμœ μ— κ°€μΉ˜λ₯Ό λ‘”λ‹€λ©΄ 값을 λŒ€κ°• λΆ„λ₯˜ν•˜λ„둝 νƒ€μž… 검사기λ₯Ό λ§Œλ“€ 것이닀. ... λ°˜λŒ€λ‘œ μ–Έμ–΄ μ„€κ³„μžκ°€ 더 λ§Žμ€ 버그λ₯Ό μ°ΎλŠ” 데 κ°€μΉ˜λ₯Ό λ‘”λ‹€λ©΄ 값을 더 μ„Έλ°€ν•˜κ²Œ λΆ„λ₯˜ν•œλ‹€. 🐧

  • νŽ­κ·„: μ˜ˆμ „μ—λŠ” β€œμ΄ μ–Έμ–΄λŠ” νƒ€μž…μ΄ μ—†λ„€? 이 μ–Έμ–΄λŠ” νƒ€μž…μ΄ ν•˜λ‚˜ 더 μžˆλ„€?”라고 μƒκ°ν–ˆλ‹€λ©΄, 이 λ¬Έμž₯을 읽고 λ‚˜λ‹ˆ β€œμ΄ μ–Έμ–΄λŠ” νƒ€μž…μ„ μ΄λ ‡κ²Œ λΆ„λ₯˜ν–ˆλ„€?”라고 생각이 λ°”λ€Œμ—ˆλ‹€.

p57. 미ꡭ의 μˆ˜ν•™μž 컀리(Haskell Curry)와 λ…Όλ¦¬ν•™μž ν•˜μ›Œλ“œ(William Alvin Howard)κ°€ λ°ν˜€λ‚Έ 사싀에 λ”°λ₯΄λ©΄ ν”„λ‘œκ·Έλž¨μ— κ΄€ν•œ μž„μ˜μ˜ μ„±μ§ˆμ„ νƒ€μž…μœΌλ‘œ ν‘œν˜„ν•  수 μžˆλ‹€. 🌡

p62. λ‹€ν˜•μ„±(polymorphism)은 νƒ€μž… κ²€μ‚¬κΈ°μ˜ μ˜€νŒμ„ μ€„μ΄λŠ” μ•ˆμ „ν•œ κΈ°λŠ₯의 λŒ€λΆ€λΆ„μ„ μ°¨μ§€ν•˜λŠ” κ°œλ…μ΄λ‹€. 🌡

  • 튜브: μ•žμœΌλ‘œ 잘 μ•Œμ•„λ³΄μž!

⬆️ μœ„λ‘œ 이동

2μž₯. μ„œλΈŒ νƒ€μž…μ— μ˜ν•œ λ‹€ν˜•μ„±

p78. 이름에 μ˜ν•œ μ„œλΈŒνƒ€μž…μ„ μ‚¬μš©ν•˜λŠ” 경우, νƒ€μž… κ²€μ‚¬κΈ°λŠ” νƒ€μž…μ΄ 보여 μ£ΌλŠ” ν΄λž˜μŠ€μ™€ 이름과 클래슀 μ‚¬μ΄μ˜ 상속 κ΄€κ³„λ§Œ κ³ λ €ν•œλ‹€. 🐧

p84. ꡬ쑰에 μ˜ν•œ μ„œλΈŒνƒ€μž…μ„ μ‚¬μš©ν•˜λŠ” 경우, νƒ€μž… κ²€μ‚¬κΈ°λŠ” 클래슀 μ‚¬μ΄μ˜ μƒν˜Έ 관계 λŒ€μ‹  클래슀의 ꡬ쑰, 즉 각 ν΄λž˜μŠ€μ— μ–΄λ–€ ν•„λ“œμ™€ λ©”μ„œλ“œκ°€ μžˆλŠ”μ§€ κ³ λ €ν•œλ‹€. 클래슀 Aκ°€ 클래슀 B에 μ •μ˜λœ ν•„λ“œμ™€ λ©”μ„œλ“œλ₯Ό λͺ¨λ‘ μ •μ˜ν•œλ‹€λ©΄ AλŠ” B의 μ„œλΈŒνƒ€μž…μ΄λ‹€. 🐧

  • νŽ­κ·„: 이름에 μ˜ν•œ μ„œλΈŒνƒ€μž…κ³Ό ꡬ쑰에 μ˜ν•œ μ„œλΈŒνƒ€μž… 각각에 λŒ€ν•œ μ˜ˆμ‹œμž…λ‹ˆλ‹€. (파이썬이 주언어라 파이썬으둜 μ”λ‹ˆλ‹€. μ ˆλŒ€ λŒμ•„κ°€μ§€ μ•Šμ•„μš”β€¦)
    #  Personκ³Ό StudentλŠ” HasEmail의 μ„œλΈŒνƒ€μž…
    # 이름에 μ˜ν•œ μ„œλΈŒνƒ€μž…
    class HasEmail:
      email: str
    
    class Person(HasEmail):
      name: str
      age: int
    
    class Student(HasEmail):
      name: str
      grade: int
    
    # ꡬ쑰에 μ˜ν•œ μ„œλΈŒνƒ€μž…
    class HasEmail:
      email: str
    
    class Person:
      name: str
      age: int
      email: str
    
    class Student(Email):
      name: str
      grade: int
      email: str
  • 튜브: TypeScriptμ—μ„œ μ‚¬μš©ν•˜λŠ” ꡬ쑰에 μ˜ν•œ μ„œλΈŒνƒ€μž… μ˜ˆμ‹œ
    interface ExampleProps {
      id: string;
      other: number;
    }
    
    const component = ({ id: String }: ExampleProps) => {};

p88. λ‹€λ₯Έ μ½”λ“œλŠ” ν•˜λ‚˜λ„ κ±΄λ“œλ¦¬μ§€ μ•Šκ³  λ§€κ°œλ³€μˆ˜ νƒ€μž…ν‘œμ‹œλ₯Ό { String email; }둜 고치기만 ν•΄μ„œ λͺ¨λ“  문제λ₯Ό ν•΄κ²°ν•œ 것이닀. πŸ‹

p97. 단지 sendNewYearEmail이 νƒ€μž… 검사λ₯Ό 톡과할 수 μžˆλ„λ‘ νŠΉμ • 객체가 sendEmail λ©”μ„œλ“œλ₯Ό κ°€μ§„λ‹€λŠ” 사싀을 ν‘œν˜„ν•˜κΈ° μœ„ν•΄ λ§Œλ“  νƒ€μž…μΌ 뿐이닀. πŸ‹

  • 샐리: abstract에 λŒ€ν•œ μ €μžμ˜ 해석이 λ“œλŸ¬λ‚˜λŠ” 뢀뢄인 것 κ°™λ‹€.

p97. 좔상 클래슀λ₯Ό λ§Œλ“œλŠ” λͺ©μ μ€ μ–Έμ œλ‚˜ λ©”μ„œλ“œμ˜ μ‘΄μž¬μ— κ΄€ν•œ 정보λ₯Ό νƒ€μž… 검사기에 μ œκ³΅ν•˜λ €λŠ” 것이닀. κ·Έ 자체둜 객체λ₯Ό λ§Œλ“€λ €λŠ” 게 μ•„λ‹ˆλ‹€. 🐧

  • νŽ­κ·„: ν•„μˆ˜μ μœΌλ‘œ κ΅¬ν˜„ν•΄μ•Ό ν•˜λŠ” μš”κ΅¬μ‚¬ν•­μ˜ κ΄€μ μ—μ„œλ§Œ μƒκ°ν•΄λ΄€λŠ”λ° νƒ€μž…κ²€μ‚¬κΈ°μ˜ κ΄€μ μ—μ„œ λ³΄λ‹ˆ 또 μƒˆλ‘­λ‹€.

p97. μ–Έμ–΄κ°€ ꡬ쑰에 μ˜ν•œ μ„œλΈŒνƒ€μž…μ„ μ œκ³΅ν•œλ‹€λ©΄ 좔상 λ©”μ„œλ“œμ˜ ν•„μš”μ„±μ΄ λ‹€μ†Œ 쀄어든닀. 🌡

p106. μ΅œλŒ€ νƒ€μž…μ€ λͺ¨λ“  νƒ€μž…μ˜ μŠˆνΌνƒ€μž…μ΄λ‹€. 🌡🐧

  • νŽ­κ·„: TypeScriptλ₯Ό μ“°λ©΄ 항상 Any의 μœ ν˜Ήμ„ λ°›κ²Œ λœλ‹€.
  • νŽ­κ·„: 찾아보닀 μ•Œκ²Œ 된 λ†€λΌμš΄ 사싀. TypeScriptλŠ” μ΅œλŒ€ νƒ€μž…μœΌλ‘œ Any와 Unknown(λ‚˜μ€‘μ— 좔가됨)이 μžˆλŠ”λ°, κ°€μž₯ 큰 μ°¨μ΄λŠ” AnyλŠ” νƒ€μž… 검사 자체λ₯Ό ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— λŸ°νƒ€μž„ λ•Œ μ—λŸ¬κ°€ λ°œμƒν•˜κ³  Unknown을 μ“°λ©΄ 컴파일 μ‹œ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€. 즉, AnyλŠ” TypeScriptλ₯Ό Python처럼 μ“΄λ‹€λŠ” λ§μ΄μ–΄μ„œ μ œλŒ€λ‘œλœ νƒ€μž… 검증을 ν•˜κ³  μ‹Άλ‹€λ©΄ Unknown을 μ¨μ•Όν•œλ‹€.

p109. μ˜ˆμ™Έλ‘œ μΈν•œ μ’…λ£ŒλŠ” νƒ€μž… 였λ₯˜λ‘œ λΆ„λ₯˜ν•˜μ§€ μ•ŠλŠ”λ‹€. λ‹€μ‹œ 말해 νƒ€μž… 검사λ₯Ό ν†΅κ³Όν•œ ν”„λ‘œκ·Έλž¨μ΄λ”λΌλ„ μ˜ˆμ™Έκ°€ λ°œμƒν•΄ 싀행이 κ°‘μž‘μŠ€λŸ½κ²Œ 쀑단될 수 μžˆλ‹€. 🐧

p114. VoidλŠ” ν•¨μˆ˜κ°€ 계산을 끝낼 λ•Œ 아무 값도 λ°˜ν™˜ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 사싀을 λ‚˜νƒ€λ‚΄μ§€λ§Œ, μ΅œμ†Œ νƒ€μž…μ€ ν•¨μˆ˜κ°€ 계산을 λλ§ˆμΉ˜μ§€ λͺ»ν•œλ‹€λŠ” 사싀을 λ‚˜νƒ€λ‚Έλ‹€. πŸ‹πŸ§

  • 샐리: 계산을 λλ§ˆμΉ˜μ§€ μ•ŠλŠ”λ‹€λ©΄ 아무 νƒ€μž…μ΄λ‚˜ 써도 λ˜λŠ”κ±° μ•„λ‹κΉŒ? 이런걸 λ§Œλ“€ 생각을 ν–ˆλ‹€λŠ”κ²Œ μ‹ κΈ°ν–ˆλ‹€.

p115. μ΅œμ†Œ νƒ€μž…μ€ '계산을 λλ§ˆμΉ˜μ§€ λͺ»ν•œλ‹€'λ₯Ό ν‘œν˜„ν•˜λ‹ˆ 계산이 끝날 일도 μ—†κ³  μƒμžκ°€ 열릴 일도 μ—†λ‹€. μ΄λŠ” μ΅œμ†Œ νƒ€μž…μ— μ†ν•˜λŠ” 값이 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 사싀과도 일λ§₯μƒν†΅ν•œλ‹€. 🌡

p121. κ·Έλž˜μ„œ μ΄κ±°λ‚˜ νƒ€μž…μ„ μ œκ³΅ν•˜λŠ” μ–Έμ–΄λŠ” μœ„μΉ˜μ— λ―Όκ°ν•œ νƒ€μž… κ²€μ‚¬λΌλŠ” μ •κ΅ν•œ λ°©μ‹μ˜ νƒ€μž… 검사λ₯Ό μ‚¬μš©ν•œλ‹€. λ³€μˆ˜μ˜ 값을 μ½λŠ” λΆ€ν’ˆμ˜ νƒ€μž…μ„ 검사할 λ•Œ ν•΄λ‹Ή λ³€μˆ˜κ°€ μ •μ˜λœ 곳의 νƒ€μž… ν‘œμ‹œλ§Œ λ³΄λŠ” 것이 μ•„λ‹ˆλΌ, κ·Έ λ³€μˆ˜κ°€ μ–΄λ””μ„œ μ‚¬μš©λ˜λŠ”μ§€λ„ κ³ λ €ν•˜λŠ” 것이닀. πŸ‹

p123. μœ„μΉ˜μ— λ―Όκ°ν•œ νƒ€μž… 검사가 잘 μž‘λ™ν•˜λ„λ‘ ν”„λ‘œκ·Έλž¨μ˜ ꡬ쑰λ₯Ό λ‹¨μˆœν•˜κ²Œ λ§Œλ“€μ–΄μ•Ό ν•œλ‹€λŠ” 것이닀. πŸ‹πŸ§

  • νŽ­κ·„: 1μž₯μ—μ„œ νƒ€μž… 검사기가 톡과할 수 μžˆλ„λ‘ μ½”λ“œλ₯Ό μˆ˜μ •ν•˜λ©΄μ„œ ν•œλ‹€λŠ” 말이 기얡났닀.
  • 튜브: 무언가λ₯Ό μ„€λͺ…ν•˜λ € ν–ˆλŠ”λ°...
    (a: int | str) => a + 1 : int

p129. μ΄λ©΄μ„œ νƒ€μž…μ€ 닀쀑 상속이 μžˆμ„ λ•Œ μœ μš©ν•˜λ‹€. 닀쀑 상속은 ν•œ ν΄λž˜μŠ€κ°€ μ—¬λŸ¬ 클래슀λ₯Ό 직접 μƒμ†ν•˜λŠ” 것을 λ§ν•œλ‹€. πŸŒ΅πŸ‹

  • 튜브: 무언가λ₯Ό μ„€λͺ…ν•˜λ € ν–ˆλŠ”λ°...
    type A = {a, b, c}, type B = {b, c, d}, type C = A & B -> {b, c}
    type A = {a, b}, type B = A & {c} -> {a, b, c}, type C = A & {d} -> {a,b,d}
    

p140. κ²°κ³Ό νƒ€μž…μ˜ μ„œλΈŒ νƒ€μž… 관계가 μœ μ§€λœλ‹€λŠ” 사싀은 λ‚˜λ¦„ 직관적인 것에 λΉ„ν•΄, λ§€κ°œλ³€μˆ˜ νƒ€μž…μ˜ μ„œλΈŒνƒ€μž… 관계가 λ’€μ§‘νžŒλ‹€λŠ” 사싀은 처음 봀을 λ•Œ λ‹€μ†Œ μ΄μƒν•˜κ²Œ 듀릴 수 μžˆλ‹€. πŸ§πŸ‹

  • 튜브, 샐리, νŽ­κ·„: κ΄€λ ¨λœ λ‚΄μš©μ„ κ°„λ‹¨νžˆ μ •λ¦¬ν•΄λ³΄μžλ©΄,
    • μ „μ œ: Studentκ°€ Person의 μ„œλΈŒνƒ€μž…μ΄λ‹€.
      1. Student -> Boolean인 경우: Student만 인자둜 κ°€λŠ₯ πŸ‘‰ λΆ€λͺ¨
      2. Person -> Boolean인 경우: Student, Person λͺ¨λ‘ 인자둜 κ°€λŠ₯ πŸ‘‰ μžμ‹
    • κ²°λ‘ : b.λŠ” a.의 μ„œλΈŒνƒ€μž…μ΄λ‹€. πŸ‘‰ μ„œλΈŒνƒ€μž… 관계가 역전됨

⬆️ μœ„λ‘œ 이동

3μž₯. λ§€κ°œλ³€μˆ˜μ— μ˜ν•œ λ‹€ν˜•μ„±

p157. μ΄λ ‡κ²Œ choose처럼 ν•œ 개 μ΄μƒμ˜ νƒ€μž… λ§€κ°œλ³€μˆ˜λ₯Ό κ°€μ§€λŠ” ν•¨μˆ˜λ₯Ό μ œλ„€λ¦­ ν•¨μˆ˜(generic function)라고 λΆ€λ₯Έλ‹€. 🐧

p159. Tκ°€ νƒ€μž… λ§€κ°œλ³€μˆ˜μΌ λ•Œ ν•¨μˆ˜ μ•ˆμ—μ„œ T νƒ€μž…μ˜ λΆ€ν’ˆμ€ 아무 νŠΉλ³„ν•œ λŠ₯λ ₯도 μš”κ΅¬λ˜μ§€ μ•ŠλŠ” κ³³μ—λ§Œ μ‚¬μš©λ  수 μžˆλ‹€. πŸ§πŸ‹πŸŒ΅

p167. κ·ΈλŸ¬λ‹ˆ νƒ€μž… 인자 좔둠이 μ–Έμ œλ‚˜ λ‚΄κ°€ μ›ν•˜λŠ” λŒ€λ‘œ λ˜μ§€λŠ” μ•ŠλŠ”λ‹€λŠ” 사싀을 항상 κΈ°μ–΅ν•΄μ•Ό ν•œλ‹€. νƒ€μž… 검사기가 λ‚΄ ν”„λ‘œκ·Έλž¨μ„ κ±°λΆ€ν•œ 이유λ₯Ό 잘 λͺ¨λ₯΄κ² μ„ λ•ŒλŠ” μƒλž΅ν•œ νƒ€μž… 인자λ₯Ό ν•˜λ‚˜μ”© λ‹€μ‹œ λ„£μ–΄ λ³΄λŠ” 것이 도움이 될 수 μžˆλ‹€. 🐧🌡

p171. κ°œλ°œμžλŠ” 이런 μ˜λ¦¬ν•œ νƒ€μž… 좔둠이 μ–΄λ–»κ²Œ κ°€λŠ₯ν•œμ§€ μžμ„Ένžˆ λͺ°λΌλ„ λœλ‹€. κ·Έμ € νƒ€μž… 좔둠이 μ£ΌλŠ” 해택을 λˆ„λ¦¬λ©΄ κ·Έλ§Œμ΄λ‹€. 🐧

  • νŽ­κ·„: β€˜ChatGPTλ₯Ό μ‚¬μš©ν•  λ•Œ ChatGPTκ°€ λ‚΄λΆ€μ μœΌλ‘œ μ–΄λ–»κ²Œ λŒμ•„κ°€λŠ”μ§€ μ•Œμ§€ λͺ»ν•΄λ„ μ‚¬μš©ν•  수 μžˆλ“―μ΄ ChatGPTκ°€ μ£ΌλŠ” 해택을 λˆ„λ¦¬λ©΄ κ·Έλ§Œμ΄λ‹€.β€™λΌλŠ” λŠλ‚Œ..?

p171. μ–΄λ–€ λ§€κ°œλ³€μˆ˜κ°€ ν•¨μˆ˜ μ•ˆμ—μ„œ νŠΉλ³„ν•œ λŠ₯λ ₯이 μš”κ΅¬λ˜μ§€ μ•ŠλŠ” κ³³μ—μ„œλ§Œ μ‚¬μš©λœλ‹€λ©΄ κ·Έ λ§€κ°œλ³€μˆ˜μ˜ νƒ€μž…μ€ νƒ€μž… λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•΄ ν‘œν˜„ν•  수 μžˆλ‹€. λ”°λΌμ„œ 그런 λ§€κ°œλ³€μˆ˜κ°€ ν•˜λ‚˜λΌλ„ λ°œκ²¬λœλ‹€λ©΄ κ·Έ ν•¨μˆ˜λŠ” μ œλ„€λ¦­ ν•¨μˆ˜κ°€ λœλ‹€. πŸ‹

p172. ν•˜μ§€λ§Œ μ–΄λ–€ ν•¨μˆ˜κ°€ μžλ™μœΌλ‘œ μ œλ„€λ¦­ ν•¨μˆ˜κ°€ λ˜μ—ˆλ‹€λŠ” 사싀을 κ°œλ°œμžκ°€ λˆˆμΉ˜μ±„μ§€ λͺ»ν•œλ‹€λ©΄ λ¬Έμ œκ°€ 생긴닀. 특히 νƒ€μž… 검사기가 λ‚΄λ±‰λŠ” 였λ₯˜ λ©”μ‹œμ§€λ₯Ό μ΄ν•΄ν•˜κΈ° 맀우 μ–΄λ €μ›Œμ§„λ‹€.9 🐧

  • νŽ­κ·„: νŠΉλ³„ν•œ μ΄μœ κ°€ μžˆμ§€ μ•ŠλŠ” 이상 μžλ™ 좔둠을 쓰진 μ•Šμ„ 것 κ°™κ³  λͺ…μ‹œμ μœΌλ‘œ νƒ€μž…μ„ λͺ…μ‹œν•  것 κ°™λ‹€. λ‚˜λŠ” μ•Œμ•„λ„ λͺ‡ λ…„ ν›„ 이 μ½”λ“œλ₯Ό λ³Ό κ°œλ°œμžλŠ” 였λ₯˜λ₯Ό 보고 νž˜λ“€μ–΄ ν•  μˆ˜λ„..?

p173. λ”°λΌμ„œ νžŒλ“€λ¦¬-λ°€λ„ˆ νƒ€μž… 좔둠을 μ œκ³΅ν•˜λŠ” μ–Έμ–΄λ₯Ό μ‚¬μš©ν•  λ•ŒλŠ” μš°μ„  λ§€κ°œλ³€μˆ˜ νƒ€μž… ν‘œμ‹œ 없이 μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ‹€κ°€ μ΄ν•΄ν•˜κΈ° μ–΄λ €μš΄ 였λ₯˜ λ©”μ‹œμ§€κ°€ λ‚˜μ˜€λ©΄ ν•¨μˆ˜μ— λ§€κ°œλ³€μˆ˜ νƒ€μž… ν‘œμ‹œλ₯Ό μΆ”κ°€ν•΄λ³΄λŠ” 게 μ’‹λ‹€.. πŸ‹

p176. ν”„λ‘œκ·Έλž˜λ°μ„ ν•˜λŠ” 데 κΌ­ ν•„μš”ν•œ 기본적인 νƒ€μž…μ‘°μ°¨λ„ μ œλ„€λ¦­ νƒ€μž…μœΌλ‘œ ν‘œν˜„λ  μ •λ„λ‘œ μ œλ„€λ¦­ νƒ€μž…μ€ μœ μš©ν•˜λ‹€. 🌡

p181. 리슀트의 κ²½μš°μ™€ λ§ˆμ°¬κ°€μ§€λ‘œ λͺ¨λ“  λ§΅μ˜νƒ€μž…μ„ λ­‰λš±κ·Έλ € Map이라고 ν•˜λŠ” 것은 쒋은 선택이 μ•„λ‹ˆλ‹€. κ·Έλž¬λ‹€κ°€λŠ” 각 맡에 μ €μž₯된 열쇠와 μ—°κ²°λœ κ°’λ“€μ˜ νƒ€μž…μ΄ 무엇인지 νƒ€μž… 검사기가 μ•Œ 수 μ—†κ²Œ λœλ‹€. 🐧

  • νŽ­κ·„: 문득 λ“  생각이 νŒŒμ΄μ¬μ€ 동적 언어라 νƒ€μž… 체계가 μ—†μ§€λ§Œ νƒ€μž… νžŒνŒ…μ€ κ°€λŠ₯ν•œλ°, list와 list[Any]둜 타이핑할 λ•Œ μ–΄λ–€ 차이가 μžˆμ„κΉŒ μ°Ύμ•„λ³΄μ•˜λ‹€. 결둠은 검사 ν•­λͺ©μ΄ ν•˜λ‚˜ 더 μΆ”κ°€λœ λŠλ‚Œμ΄λ‹€.

    # python 3.9+
    from typing import Any
    
    my_list: list = [1, 2, 3] # νƒ€μž… 검사기: "assign된게 list인가?"
    my_list: list[Any] = [1, 2, 3] # νƒ€μž… 검사기: "assign된게 list인가?", "κ·Έ μ•ˆμ— μš”μ†Œκ°€ Any νƒ€μž…μΈκ°€?"
    my_list: list[int] = [1, 2, 3] # νƒ€μž… 검사기: "assign된게 list인가?", "κ·Έ μ•ˆμ— μš”μ†Œκ°€ int νƒ€μž…μΈκ°€?"

p196. ν•˜μ§€λ§Œ 이건 μš°λ¦¬κ°€ μ›ν•˜λŠ” 게 μ•„λ‹ˆλ‹€. μš°λ¦¬κ°€ μ›ν•˜λŠ” 것은 List<Int> => Int νƒ€μž…μœΌλ‘œλ„ μ‚¬μš©λ  수 있고 List<String> => String νƒ€μž…μœΌλ‘œλ„ μ‚¬μš©λ  수 μžˆλŠ” ν•¨μˆ˜λ₯Ό 인자둜 λ°›λŠ” 것이닀. μ΄λŠ” λΆ„λͺ…νžˆ μœ„μ˜ μ½”λ“œμ™€λŠ” λ‹€λ₯΄λ‹€. 🐧

p212. 라이브러리 μ‚¬μš©μžκ°€ λ‹€μŒμ²˜λŸΌ cmpλ₯Ό μ‚¬μš©ν•˜λ„λ‘ κ°•μ œλ˜λŠ” 것이닀. πŸ‹

p212. 반면 무엇인가 νƒ€μž…μ˜ 역할은 μ •λ°˜λŒ€λ‹€. 였히렀 νƒ€μž… 검사λ₯Ό 톡과할 수 μžˆλŠ” ν”„λ‘œκ·Έλž¨μ΄ νƒ€μž… 검사λ₯Ό ν†΅κ³Όν•˜μ§€ λͺ»ν•˜λ„둝 λ°©ν•΄ν•œλ‹€. μ΄λŠ” 보톡 ν•„μš” μ—†λŠ” λŠ₯λ ₯이닀. ν•˜μ§€λ§Œ μ–΄λ–€ κ²½μš°μ—λŠ” 이 λŠ₯λ ₯이 μ€‘μš”ν•˜λ‹€. μ˜ˆμ—μ„œ λ³Έ κ²ƒμ²˜λŸΌ 라이브러리λ₯Ό λ§Œλ“œλŠ” 상황이 여기에 μ†ν•œλ‹€. πŸ§πŸ‹

⬆️ μœ„λ‘œ 이동

4μž₯. 두 λ‹€ν˜•μ„±μ˜ λ§Œλ‚¨

p0. μˆ˜μˆ˜μˆ˜μˆ˜νΌλ…Έλ°” πŸ§πŸ‹πŸŒ΅

  • νŽ­κ·„: λ…Έλ°” μΊ” μŠ€νƒ‘ ν•˜μ΄νΌ μŠ€ν…”λΌ~

⬆️ μœ„λ‘œ 이동

5μž₯. μ˜€λ²„λ‘œλ”©μ— μ˜ν•œ λ‹€ν˜•μ„±

p0. μˆ˜μˆ˜μˆ˜μˆ˜νΌλ…Έλ°” πŸ§πŸ‹πŸŒ΅

  • νŽ­κ·„: λ…Έλ°” μΊ” μŠ€νƒ‘ ν•˜μ΄νΌ μŠ€ν…”λΌ~

⬆️ μœ„λ‘œ 이동


πŸ’¬ λŠλ‚€μ 

νŒ€μ› λŠλ‚€μ 
νŽ­κ·„
샐리
튜브

⬆️ μœ„λ‘œ 이동