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장. 두 닀형성의 만낹

p224. 전통적윌로는 객첎 지향 ì–žì–Žê°€ 서람타입에 의한 닀형성을, 핚수형 ì–žì–Žê°€ 맀개변수에 의한 닀형성을 지원했닀. 하지만 최귌에는 한 ì–žì–Žê°€ 두 종류의 닀형성을 몚두 제공하는 겜우가 흔하닀. 🐧

p227. 따띌서 각각의 타입 T마닀 ArrayList와 LinkedList가 List의 서람타입읎 된닀. 🍋

p229. 읎처럌 한 큎래슀가 제넀늭 큎래슀륌 타입 읞자에 상ꎀ 없읎 상속하는 대신 타입 읞자가 특정 타입음 때만 상속하는 겜우가 있닀. 🐧

p230. 귞러니 타입 검사Ʞ가 서람타입 ꎀ계륌 파악하렀멎 각 큎래슀가 묎엇을 상속하는지 정확히 알아알 한닀. 읎것읎 귞냥 extends List띌고 ì“ž 수 없는 읎유닀. 타입읞자에 상ꎀ없읎 상속할 것읎띌멎 ArrayList extends List처럌 썚알 하고, 타입 읞자가 특정 타입음 때만 상속할 것읎띌멎 BitVector extends List처럌 썚알 한닀. 🍋

p241. 읎런 상황에 처한 읎유는 age 필드의 값을 읜는 능력읎 음부 타입듀만 가지고 있는 능력읎Ʞ 때묞읎닀. ... elder륌 타입 맀개변수 T륌 가진 제넀늭 핚수로 정의하되 T에 제한을 거는 것읎닀. T가 몚든 타입읎 아니띌 Person의 서람타입만 나타낞닀는 사싀을 타입 검사Ʞ에 알렀 쀘알 한닀. 🍋

  • 펭귄: Python 쓰닀가 요새 Java륌 쓰고 있는데 타입 였류가 날 때마닀 힘듀었는데 “타입 검사Ʞ가 좀 빡빡할 뿐읎구나"띌고 생각하니 ì–žì–Žê°€ 좀 더 읎핎가 됐닀! 읎 책은 두고두고 뎐알할 듯!

p245. 상한읎 많은 겜우에 유용한 것곌 달늬 하한읎 필요한 겜우는 드묌닀. 🐧

p253. 슉, 타입 T가 sort의 타입 읞자로 사용되렀멎 T타입의 값을 T타입의 값곌 비교할 수 있얎알 한닀는 조걎을 추가한 셈읎닀. 🍋🌵

p262. 반멎 가변성은 하나의 제넀늭 타입에서 타입 읞자만 닀륎게 하여 얻은 타입듀 사읎의 서람타입 ꎀ계륌 만든닀. 🐧

p269. 귞래서 제넀늭 타입읎 타입 읞자와 '핚께 변한닀'는 뜻을 ë‹Žì•„, 읎런 가변성을 공변읎띌고 부륞닀. 🍋

p270. 따띌서 타입 읞자가 서람타입윌로 변핎도 제넀늭 타입은 서람타입윌로 '안 변한닀'는 뜻윌로서, 읎런 가변겜을 불변읎띌 부륞닀. 🍋

p272. 결론부터 말하자멎, G가 T륌 출력에만 사용하멎 공변, 입력에만 사용하멎 반변, 출력곌 입력 몚두에 사용하멎 불변읎닀. 🐧

p274. G가 T륌 출력에만 사용하멎 공변, 입력에만 사용하멎 반변, 출력곌 입력 몚두에 사용하멎 불변읎닀 🌵

p275. 타입 검사Ʞ의 서람타입 판당 방법읎 두 가지읞 것처럌 가변성 판당 방법 역시 두 가지닀. 하나는 개발자가 제넀늭 타입을 정의할 때 가변성을 지정하도록 한 ë’€ 귞에 따륎는 것읎고, 닀륞 하나는 사용할 때 가변성을 지정하도록 한 ë’€ 귞에 따륎는 것읎닀. 🍋

  • 펭귄: 같읎 정늬한 불변/공변/반변성!

    전재:
    - Student -> Person
    - GenericClass<T> 제넀늭 큎래슀
    
    묞제:
    - GenericClass<Student>곌 GenericClass<Person>의 상속 ꎀ계는?
    
    정답:
    - 상속 ꎀ계가 상ꎀ읎 없음 = 불변(Invariance)
    - 상속 ꎀ계가 귞대로 감 = 공변(Covariance) 👉 GenericClass<Student> -> GenericClass<Person>
    - 상속 ꎀ계가 반대로 됚 = 반변(Contravariance) 👉 GenericClass<Person> -> GenericClass<Student>
    

⬆ 위로 읎동


5장. 였버로딩에 의한 닀형성

p308. 슉, 한 핚수가 닀륞 하나볎닀 더 특화되었닀는 말은 한 핚수의 맀개변수 타입읎 닀륞 핚수의 맀개변수 타입의 서람타입읎띌는 뜻읎닀. 🍋🌵

p309. 읞자의 타입에 맞는 핚수륌 몚두 찟을 ë’€ 귞쀑 가장 특화된 핚수륌 찟윌멎 ê·ž 핚수가 혞출 대상읎닀. 🍋

p310. 귞러니 핚수 였버로딩을 사용할 때는 정적 선택을 잘 읎핎핎알 한닀. 🍋

p310. 읎렇게 정적 타입을 바탕윌로 핚수륌 선택하는 것을 정적 선택(static dispatch)읎띌 부륞닀. 🐧

p311. 핚수 였버로딩은 서로 완전히 닀륞 타입듀의 값을 읞자로 받는 핚수륌 정의하는 용도로 사용하는 게 좋닀. 🌵

p322. 읎처럌 메서드 였버띌읎딩을 사용하멎 서람타입을 위핎 더 특화된 동작을 정의하고, 정적 타입에 상ꎀ없읎 얞제나 ê·ž 특화된 동작읎 사용되도록 만듀 수 있닀. 🍋

p322. 여Ʞ서 핚수 선택곌 메서드 선택의 찚읎가 드러난닀. 핚수 선택은 읞자의 정적 타입만 고렀한닀. 반멎 메서드 선택은 읞자의 정적 타입을 고렀하는 것까지는 동음하지만, 거Ʞ에 더핮 수신자의 동적 타입 역시 고렀한닀. 🍋

p332. 자식 큎래슀에 정의한 메서드의 결곌 타입읎 부몚 큎래슀에 원래 있는 메서드의 결곌 타입의 서람타입읎얎알 한닀. 🌵

p342. 특정 타입을 ì–Žë–€ 타입큎래슀에 속하게 만듀고 싶닀멎 타입큎래슀 읞슀턎슀(typeclass instance)륌 정의핎알 한닀. 🐧🍋

p351. 읎처럌 추상 큎래슀로는 제넀늭 타입읎 타입 읞자에 상ꎀ없읎 항상 만족하는 성질만 표현할 수 있닀. 하지만 타입큎래슀로는 항상 만족하는 성질은 묌론읎고 특정 타입 읞자륌 받은 겜우에만 만족하는 성질 역시 표현할 수 있닀. 🐧🍋

  • 펭귄: 싀제로 사용한 걞 볞 적읎 없얎서 낯섀닀 

p362. 칎읞드는 곧 타입의 타입읞 셈읎닀. 🐧🍋

p345. 핚수는 아묎 때나 정의할 수 있지만 메서드는 큎래슀륌 정의할 때만 정의할 수 있닀. 🌵🍋

⬆ 위로 읎동


💬 느낀점

팀원 느낀점
펭귄 Python을 계속 쓰닀가 최귌에 JVM 계얌의 ì–žì–Ž(ex. Java, Scala)륌 사용하게 되었는데 읎 책읎 정말 큰 도움을 죌었닀. 개읞적윌로 정적 얞얎볎닀는 동적 얞얎륌 선혞했지만, 읎 책을 통핎 "왜 정적 얞얎륌 사용하는지", "정적 얞얎의 첎계는 얎떻게 되었는지" 알 수 있었얎서 좋았고 특히 "공변", "반변", "불변"을 완벜히 읎핎하게 되었닀. 정적 얞얎륌 100% 마슀터하지 않는 읎상은 읎 책을 두고두고 볌 것 같닀.
샐늬
튜뾌

⬆ 위로 읎동