Skip to content
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

타입으로 견고하게 다형성으로 유연하게 5주차 - 하업서 #490

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
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
Binary file not shown.
10 changes: 10 additions & 0 deletions 2025/RobustWithTypeFlexibleWithPolymorphism/hemil0102/5장.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# 5장 오버로딩에 의한 다형성

한 3장부터 난이도가 어려워져서 점점 4장, 5장으로 넘어갈 수록 앞에 내용이 거론되니 5장에서는 기존에 알고 있던 오버로딩과 오버라이딩 정도는 이해를 했지만 타입클래스나 카인드는 글로만 내용을 읽기엔 이해가 안되서 코딩을 해봐야하는데, 뭔가 당장 써먹지도 않을 내용 같아서 손이 잘 안가서 눈으로만 대충 읽었다.

스위프트 언어가 주력인 나에게 이 책은 스위프트에는 없는 기능들을 많이 소개해주었다. 그래서인지 가장 초반에 얘기했던 언어를 고르는 기준은 해결할 문제에 따라서 선택하면 된다는 말이 잘 와닿았다. 스위프트는 애플이 지향하는 심플과 쉬운 접근성을 위해서 문법들이 간단하고 쉽고 직관적이게 만들어져 있다. 스위프트를 하다가 다른 자바로 작성된 코드들을 읽어보니, 아... 이래서 애플 개발자들은 다른 개발 안하려는거구나...라는 생각이 스스로도 들었다. 그렇다고 스위프트가 엄청 쉬운 것은 아니지만, 상대적으로 쉬워보인다.

다른 언어의 이런 다양한 스킬들이 없어도 개발이 되는거보면 굳이 이렇게 까지 해야하나 싶기도한데, 그래서 논제는....

# 논제 #
Copy link
Contributor

Choose a reason for hiding this comment

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

저도 책에서 주어지는 언어마다의 예제말고는 접하기 어려운 것 같습니다. (4장 5장) 이해하기 어려웠던 부분인 카인드같은 개념은 처음보고 사용되는 코드 자체가 어색했던 것 같습니다.

다만 논의 내용이 책 전반에 대해 말한다면 서브타입이나 제네릭은 충분히 활용할만한 내용같다고 생각됩니다. 아마 제가 정적타입 언어만 사용해서 익숙한 부분도 있었던게 아닌가? 라는 생각도 듭니다.

반대로 말씀해주신대로 제네릭과 서브타입을 섞어서 쓰거나 함수형 언어의 특성들은 다른 이해하기 어렵고 사용하기도 어려울 것 같습니다.

아마 그 이유는 지금 가진 기술과 도구만으로 충분히 애플리케이션을 제작할 수 있기 때문이라고 생각됩니다.

저는 타입클래스가 가장 신기했고 유용하다고 생각했습니다. 약간 인터페이스 같이 사용가능하지만 제약이 없어서 매우 유연한 느낌을 받았습니다.

지금까지 개발을 하면서 책에서 소개한 다양한 타입과 연관된 스킬을 활용해서 프로젝트를 일부러 만들어본 경험이 있는가? 또는 이 책에서 소개한 스킬들을 실제로 정말 잘 사용하는 개발자나 그렇게 만들어진 프로젝트를 접해본 적이 있는가? 책에 소개된 내용 중에서 가장 마음에 들었던 부분을 한가지씩 이야기해보기!
Copy link
Member

@jongfeel jongfeel Mar 6, 2025

Choose a reason for hiding this comment

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

좋은 기법이라고 여겨지거나 알려진 코드는 잘 작성하는 개발자는 여럿 봐왔지만
이런 기법을 써야 하는 이유에 대해서 (특히 가독성 부분에서) 설명이 잘 안되는 부분도 많이 봐 왔습니다.

그래서 스킬적인 부분에 대해 잘 쓰냐 못 쓰냐는 중요한 기준은 아닌 듯 하고
이해를 할 수 있는 만큼의 타당성 있는 설명이 가능한 코드, 가독성 있는 코드를 작성하는게 더 좋다고 봅니다.

제 소감에도 적었지만 이 책은 프로그래밍 언어의 학문적인 접근이므로 실용적인 측면에서는 쓸 수 있는게 없다 라고 생각할 수도 있습니다.
다만 저는 너무 실용적인 부분만 따라가다 보면 동작 원리, 개념, 타당성 있는 근거 제시 부분에서 취약하다고 보기 떄문에
학문적인 접근을 하는 책에서 너무 실용적인걸 가져가려고 하는 건 조심해야 할 필요가 느껴집니다.
(극단적인 예로, 컴퓨터 공학과에서는 컴퓨터 사용하다 생기는 문제 해결 혹은 코딩 잘하는 방법 배우는거 아니냐? 정도의 질문이 있을 것 같습니다.)
반대로 실용적인 책에서는 Github repository link를 알려주면 되는데 종이에 인쇄된 수십 페이지에 달하는 코드가 낭비라고 여겨질 수도 있다고 봅니다.

프로젝트에서는 기술적인 걸 지향하는 건 오히려 오버엔지니어링 혹은 불필요한 코드 생산일 수도 있기 때문에
요구사항에 부합하는 가독성 있는 간결한 코드가 낫지, 일부러? 스킬과 기교를 부린 코드 작성은 하면 안될 것 같습니다.

저는 저자의 마지막 감사의 글이 제일 마음에 들었는데
책을 쓰게 된 이유와 그 과정을 설명해 주는게 납득이 되었고 (프로그래밍 언어에 대한 학문적인 접근)
상대적으로 매번 같은 내용의 책을 매년 업데이트된 내용만 추가해서 비싸게 파는 책 보다는 훨씬 낫다는 생각도 들었습니다.

Copy link
Collaborator

Choose a reason for hiding this comment

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

지금까지 개발을 하면서 책에서 소개한 다양한 타입과 연관된 스킬을 활용해서 프로젝트를 일부러 만들어본 경험이 있는가?

일부 있는 것들도 있고, 아닌 것들도 있네요 저 개인적으로는 필요에 의한 학습을 추구하다보니, 필요할 것 같다라고 판단된 부분에 한해서, 코드도 직접 작성해보고 테스트 해봤습니다

또는 이 책에서 소개한 스킬들을 실제로 정말 잘 사용하는 개발자나 그렇게 만들어진 프로젝트를 접해본 적이 있는가?

책에 나온 모든 것을 다 잘 사용하는 개발자는 저자처럼 연구실에서 타입과 다형성을 연구하는 사람 아니면, 거의 없지 않을까 생각되네요. 잘 사용한다는게 많이 알고 사용하다라는 관점에서보자면, 제 개인적으로, 개발자의 역량이 얼마나 아느냐가 중요하다기보다, 얼마나 문제해결을 잘하느냐 에 초점이 맞춰져있다보니, 많이 아는게 그렇게 중요한 것 같진 않습니다 그걸 어떻게 문제 해결에 활용하느냐가 더 중요한거 같구요

Copy link
Member

Choose a reason for hiding this comment

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

책에서 가장 마음에 들었던 부분은 다양한 언어를 이용해서 설명해준다는 점이 좋았습니다. 글로만 이해하기 어려웠다가 예시 코드가 있어서 끝까지 책을 읽을 수 있었습니다!

40 changes: 0 additions & 40 deletions 2025/RobustWithTypeFlexibleWithPolymorphism/hemil0102/Chatepr1.md

This file was deleted.