Skip to content

타입으로 견고하게 다형성으로 유연하게 5주차 - 권태형 #488

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Apr 18, 2025
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions 2025/RobustWithTypeFlexibleWithPolymorphism/taehyoung/Chapter5.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# 논의 내용
1. 저자는 오버로딩을 써야할 때 그리고, 이거나 타입을 써야할 때에 대해서 설명해주고 있습니다. 이 책을 읽기 전까지, 제 경우 사실 이 책에서 제시한 기준에 따라 사용하기 보다는, 일단 쉽고 빠르게 구현하기위해서 무의식적으로, 이거나 타입을 쓰고, 오버로딩으로 리팩토링 하는 방식으로 작업했던 것 같습니다 다른 분들의 경우에 이 책에서 제시한 오버로딩을 써야할 때, 이거나 타입을 써야할 때 기준에 맞춰서 코드를 작성해왔는지 말해보면 좋을 것 같습니다
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저도 생각해 보면 꼭 이거나 타입에 맞게 썼다기 보다는 코드를 작성하다 보니 오버로딩이 필요하지 않을까? 제네릭으로 만들면 좋지 않을까? 로 발전했던 것 같습니다.
엄밀히 따지면 제가 주로 사용하는 언어인 C#은 이거나 타입을 지원하지 않으므로 이거나 타입을 생각하고 코드를 짠건 아닌 것 같네요.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저는 수가 적고 사용자 정의가 직접적으로 들어간다면 오버로딩을 수가 많고 일반화가 필요하면 제네릭을 떠올릴 것 같습니다.


2. 책 330p 메서드 선택의 한계 부분에서, _add 메서드를 구현한 클래스 예제를 내면서, 이 코드가 어째서 올바르게 add를 구현한 것인지 독자 스스로 고민해보라는 내용이 나온다 이부분에서 대해서 본인이 생각했던 것에 대해서 얘기해보면 좋을 것 같습니다

3. 책의 내용과 별개의 논의 내용인데, 주요 개념들이 나오기 전에 처르지와 큐리 박사가 대화를 나누면서 설명해주는 부분이 있는데요 이부분 설명이 적절하다고 보시나요? 저는 사실 별로 와닿는 설명이라는 느낌이 안들어서 중간부터는 자세히 읽지 않고 넘어갔는데, 다른 분들은 어떻게 느끼셨는지 궁금합니다
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저는 어려울 수 있는 설명에 대해 일반적인 수준의 이해를 돕기 위해 만든 대화형 맛보기 예제라는 생각이 들긴 했습니다.
그 대화 내용에 보면 볼드체로 되어 있는 단어들이 있는데 그 단어가 책의 소주제를 설명하기에 적합한 용어입니다를 표현한거라 책 내용을 읽고 다시 큐리 박사와 처르지의 대화 내용에 볼드체 단어를 보면 무슨 단어인지 알게 될겁니다.

아마 프로그래밍 언어 이해가 어려운 사람한테는 뭘 이해해야 하는지 큐리 박사와 처르지 대화 내용으로 파악할 수 있지 않나 생각도 드네요.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저는 대부분 다형성을 일반화하여 생각했을 때 (컴퓨터적 사고?) 나오는 오류들에 대해서 말하는 느낌을 받았습니다. 실제로 책에서 주어지는 예제도 비슷한 흐름으로 오류가 발생하는 사례와 개선하는 흐름으로 보여줘서 좋았습니다!



# 키워드
1. 오버로딩
1. 함수 오버로딩(function overloading)
1. 함수 선택(function dispatch)
1. 함수가 오버로딩 되어 있을 때, 호출할 함수를 자동으로 고르는 것
2. 정적 선택(static dispatch)
2. 메서드 오버로딩
3. 연산자 오버로딩
4. 오버로딩에 의한 다형성(ad hoc polymorphism)
2. 메서드 오버라이딩
1. 동적 선택(dynamic dispatch)
3. 타입클래스(typeclass)
1. 타입클래스 인스턴스(typeclass instance)
4. 카인드(kind)



# 내 생각
1. 이거나 타입 혹은 오버로딩을 언제 사용해야 할지에대한 명확한 기준을 알게 되었다
- 이거나 타입
- List로 List(“a”, 2, “c”)와 같은 형태일 때, 오버로딩으로 구현이 불가함
- 오버로딩
- 1번 경우 외 나머지는 책 내용 따르면 오버로딩을 사용하는게 더 좋다고 함
2. 메소드 오버라이딩의 경우 자바 코드 작성할 때, 많이 사용하는데, 책의 예제와 같은 상황은 따로 만나본적은 없는 것 같다. 책 예제(Vector, SparseVector)의 경우 물론, 개념 학습을 위해서, 억지 상황을 만든 예제 이겠지만, 현실에서 위와 같은 고민을 해야하다면, 상속을 하는 것보다 좀 더 쉬운 방법으로 구현 하지 않았을까 생각되고, 어떻게보면 상속의 폐해로 볼 수 있지 않을까 생각된다

3. 사실 이 책을 보기 전에는 오버로딩, 오버라이딩에 대해서 어떤 경우에는 이렇게 동작한다 라는 식으로 단순히 외우기만 했지, 실제로 타입체크 단, 실행 할 때, 어떤 방식으로 결정되는지에 대해서는 잘 알지 못했는데, 논리적으로 어떻게 타입이 결정되는지에 대해서 더 잘 알 수 있게 되었다

4. 카인드(kind) 또한 이번에 처음 알게 되었는데, 줄글로 설명한 부분들 보다는, p363 에 있는 다이어그램이 개념을 이해하는데 훨씬 도움이 되었고, 이 다이어그램을 이해하고 나서, 타입의 타입이라는 말이 이해가 되게 되었다 결국 카인드(kind) 라는 것은 타입을 한단계 더 추상화 해서 일반화시켜서 분류한 일종의 표기법?으로 이해하면 된다라고 생각하였다

5. 아무래도 함수형 언어들에 익숙하지 않다보니, 함수형 언어에만 존재하는 타입 혹은 다형성 내용은 이해가 쉽지 않았던 것 같다

6. 이 책을 보기 전에는 사실 동적 타입의 언어를 사용하면서, 약하게 정적언어의 요소를 사용하는 타입힌트를 어느정도 활용하는 것으로 만족 했었는데, 책을 본 이후에는 정적 타입의 철학과 타입과 다형성에 대한 깊은 고민들을 나도 직접 해볼 수 있게 되어서 좋았다 이걸 계기로 현재 업무에서 사용하고 있는 자바의 타입과 다형성에 대해서 더 깊게 이해해 볼 수 있는 기회가 될것 같아서 좋다

7. 책 전반적으로는 앞부분을 제외하고는 책 내용 자체가 집중해서 읽지 않으면 머릿속으로 정리하기 쉽지 않은 책이였던거 같다 기존부터 타입과 다형성에 익숙하지 않았던 탓도 있었던 것 같지만, 저자의 설명방식이 좀 만연한 감도 있었던 것 같아서 좀 지루한 면도 있었다 다른 동료에게도 이 책을 추천하면서도 읽기 쉽지 않을거라고 말할 것 같다

8. 이번에 책모임을 할 때, 결심한 것이 무작정 내용을 정리부터하는 것을 하지 않겠다는 것 이였는데, 이 책의 경우는 저자가 말하는 내용이 내 머리에 바로 체득 되진 않아서, 어느정도의 요약정리가 필요할 것 같아서, 따로 요약 정리를 할 예정이다