de-vook / The-Essence-of-Object-Orientation

책 <객체지향의 사실과 오해> 그룹 스터디
18 stars 3 forks source link

[나무 & July ] 복잡성을 다루기 위한 추상화의 예시 #24

Closed July911 closed 2 years ago

July911 commented 2 years ago

책에서는 복잡성을 다루기 위한 추상화의 예시로

라고 설명하고 있습니다. 여러분들이 생각하시는 Swift 언어 내에서 첫번째 두번째 예시는 무엇이 있을까요? 저희는 타입간의 복잡성을 해소하기 위한 예시로 프로토콜 정도를 생각했는데, 1 번에 해당하는지 2 번에 해당하는지 의견의 차이가 있었습니다. 여러분들의 생각이 궁금합니다!

토의한 내용 -> 첫번째로 프로토콜을 보는 시각은 타입이 존재하고 그 후에 프로토콜로 묶어주는 개념이라고 저는 이해했고,

나무 같은 경우에는 프로토콜이 존재하고 불필요한 세부 사항을 제거하고 타입에 채택시킨다는 개념으로 이해를 했습니다. 프로토콜과 타입간의 선후관계를 어떻게 생각하는것이 좋을까요?

-> 선후관계는 별로 의미 없는거같다. 라는 결론을 내렸습니다.

jsim27 commented 2 years ago

p.88을 다시 읽어보고 저는 생각이 조금 달라졌어요. 추상화의 어느 차원이든 프로토콜에 한정지어서 생각하는 것은 오독일 수 있을 것 같습니다.

객체의 공통된 행동을 기반으로 같은 타입으로 분류 하는 것이 이 장에서 다루는 추상화의 가장 핵심적인 내용인 것 같아요(프로토콜이 아니라!!). Swift로 치면 '타입 정의'가 추상화인 것이지요. 그리고 추상화의 두 가지 차원은 별개의 사례가 있는 것이 아니라, 묶여서 함께 가는 내용인 것 같네요.

프로토콜도 타입들을 추상화한 것일 수 있겠지만, 어쨌든 이번 장에서 다루는 핵심적인 내용과는 거리가 있는 것 같아 덧붙여 봤습니다!

gogosilver commented 2 years ago

나무가 덧붙여주신 코멘트의 내용에 동의합니다. 추상화의 예시로 작성된 두 가지의 설명은 각자 예시를 들기에는 분리되는 개념이 아니라는 생각이 들어요.

yeahg-dev commented 2 years ago

저도 나무와 고사리가 덧붙여준 내용에 동의합니다! 그리고 프로토콜은 타입을 추상화한 타입이라 생각합니다.

hwangjeha commented 2 years ago

저도 책에서 이야기하는 추상화는 타입 정의라고 생각합니다. 질문에 예시로 들었던 프로토콜은 97p에서 이야기하는 일반화/특수화 관계 모두 될 수 있다고 생각합니다.

프로토콜을 채택한 타입 간의 관계는 일반화라고 볼 수 있고, 프로토콜을 채택해줌으로써 특수성도 부여된거죠.

hayeonhee commented 2 years ago

저도 모든 분들의 의견에 동의합니다! 💡 언급해주신 추상화의 두 가지 정의(예시)는 크게 다르지 않다고 생각해요. 그래서 개발자가 프로토콜을 쓰는 의도나 프로토콜을 바라보는 시각(코다가 프로토콜을 '타입의 타입'이라고 생각한다는 것이 떠올랐어요)에 따라 달라질 수 있다고 생각합니다.

yim2627 commented 2 years ago

허황이 말씀해주신 내용에 동의합니다. 예를들어 토끼와 사람 모두 뛸 수 있으니 "뛸 수 있는 애들"로 일반화할 수 있다 생각합니다. 토끼와 사람은 "뛸수 있는 애들"의 특수화인것이고요