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

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

[[nicholas & July] JAVA의 추상클래스, 인터페이스와 Swift의 프로토콜의 상관관계는 어떻게 될까요? #33

Open Kim-EunsooSilver opened 2 years ago

Kim-EunsooSilver commented 2 years ago

이번 장에서 추상클래스가 등장을 했기에 우리가 공부한 내용을 Swift로 대치해본다면 어떻게 생각해야 하나...? 라는 질문으로 시작하게 되었습니다.

제가 조사한 내용을 짧게 요약하자면 추상클래스, 인터페이스 ⊆ 프로토콜로 귀결되었습니다. Reference: 추상클래스 VS 인터페이스

이 생각을 확장해서 책의 문장을 Swift 언어로 대치해 보았습니다!

p. 204 인터페이스를 정의하는 추상 클래스와 인터페이스를 구현하는 구체적인 클래스 간의 상속 관계는 클래스 기반의 객체지향 언어에서 다형성을 구현하는 가장 기본적인 방법이다.

저는 상위 문장을 Swift로 대치해보자면! (객체들간의 통신 위한)인터페이스를 정의하는 프로토콜과 프로토콜에 정의된 인터페이스를 구현하는 구체적인 타입 간의 채택 관계는 객체지향 언어(혹은 프로토콜 지향 언어)에서 다형성을 구현하는 기본적인 방법이다.

라고 생각해보았습니다!

여러분들의 생각은 어떠신가요? 제가 생각한 추상클래스, 인터페이스 ⊆ 프로토콜 관계가 맞다고 생각하시나요? 그리고, 책의 문장을 Swift 언어로 대치한 문장에 대해서 다르게 생각하고 계시나요?

여러분들의 의견이 궁금합니다!!!

jsim27 commented 2 years ago

자바를 잘 모르지만, 위 문장으로만 놓고 추상 클래스는 프로토콜로 보면 맞는 것 같아요. 바꾸어도 어색함이 전혀 없네요!

하지만 (공용)인터페이스는 프로토콜보다 조금 더 넓은 개념으로, "외부에 공개된 메서드와 프로퍼티의 집합" 이라고 생각합니다😄

hwangjeha commented 2 years ago

니코와 줄라이가 생각한 추상클래스, 인터페이스 ⊆ 프로토콜 관계에 동의합니다. 하지만 설계는 개발자에 따라서 달라지고 클래스의 상속으로도 204p 그림 6.13의 구조를 설계할 수 있다고 생각합니다.

다형성을 구현하고 유연한 구조를 만드는 데 프로토콜만이 정답은 아니라는 생각이 들었습니다.😊

yanghojoon commented 2 years ago

추상 클래스, 인터페이스를 하나의 집합으로 본다면 Swift의 프로토콜 보다 더 넓은 개념(프로토콜을 포함하는 개념)이라고 생각합니다! 기능은 인터페이스, 추상클래스와 유사하지만 추상클래스, 인터페이스 ⊇ 프로토콜이지 않을까요??

yeonheeha commented 2 years ago

우선 저는 자바의 인터페이스와 스위프트의 프로토콜이 비슷한 개념이라고 생각하고 있었어요. 자바의 인터페이스 ≒ 스위프트의 프로토콜 누가 더 큰 개념이라 포함할 수 있는지, 또 자바의 추상 클래스는 어떤지는 아직 잘 모르겠습니다!

인용해주신 아래 문장에서

인터페이스를 정의하는 추상 클래스와 인터페이스를 구현하는 구체적인 클래스 간의 상속 관계는 클래스 기반의 객체지향 언어에서 다형성을 구현하는 가장 기본적인 방법이다.

인터페이스가 자바의 인터페이스와 동일한 것이겠죠?

gogosilver commented 2 years ago

자바를 모르는 입장에서 저는 챕터 전반에 걸쳐 말하는 다형성 혹은 자율성을 읽으며 이것들을 몇 가지 정도의 형태로 계속 비유하며 이해해보았던 듯합니다.

책에서 말하는 인터페이스나 추상클래스의 역할을 더 확장해서 생각핼 수 있을 것 같습니다. 여러분은 어떻게 생각하시나요?