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

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

[호댕 & Lily] 메시지를 전송하는 방법에는 어떤 것이 있을까요? #29

Closed yanghojoon closed 2 years ago

yanghojoon commented 2 years ago

저희가 생각했을 때 메시지를 전송하는 방법에는 메서드를 호출하거나, 연산 프로퍼티를 호출하는 방법이 있다고 생각했습니다.

이런 방법들이 메시지를 전송하는 방법이 맞을까요?

또 이것 외에 다른 방법이 있을지도 궁금합니다.

Kim-EunsooSilver commented 2 years ago

P.166 첫번째 문단 책임은 객체가 메시지를 수신했을 때 수행해야 하는 객체의 행동이며, 실제로 객체의 공용 인터페이스를 구성하는 것은…

위 인용글에 따르면 메시지를 받은 수신자는 책임에 따른 행동을 수행하고 필요에따라서 응답을 하기도 합니다. 그 책임에 맞는 행동을 하는 무언가라면 메시지가 될 수 있을거 같습니다!

Swift에서 구체적인 예로는 적어주신 메서드, 연산 프로퍼티 외에는 떠오르는게 없네요🙊 내일 스터디때 같이 고민해봐요!!

yeahg-dev commented 2 years ago

연산프로퍼티는 상태이기때문에 메시지를 전송하는 방법으로 사용될 수 없다고 생각이 바뀌었는데요😅 처음엔 연산프로퍼티 또한 {set]을 통해서 외부의 객체에서 값을 할당해주어서 수신받는 객체의 상태를 바꿔줄 수 있다는 점에서 연산프로퍼티도 메시지로 볼 수 있다고 생각을 했어요

그런데 책의 168p를 다시 읽어보고 나니

객체는 상태를 가진다. 상태는 어떤 식으로든 객체에 포함되겠지만 객체 외부에 노출되는 공용 인터페이스의 일부는 아니다. 따라서 상태를 어떻게 표현할 것인가는 객체의 구현에 해당한다.

메시지를 수신할 때 객체의 공용 인터페이스를 이용한다는 점에서 봤을 때, 책의 설명에 따르면 상태인 연산프로퍼티는 공용 인터페이스가 아니기때문에 메시지도 될 수 없을 것 같습니다.

yeonheeha commented 2 years ago

저는 이번 장을 읽으면서 전송된 메세지를 수행하는 방법이 메서드라고 생각했습니다.

책 166쪽 메서드란 메시지를 수신했을 때 책임을 수행하는 방법을 의미한다

그래서 주신 질문을 책임을 수행하는 방법이 무엇이 있을까? 라는 질문으로 받아들이고 생각해보았는데요. 연산 프로퍼티, 메서드 둘 다 책임을 수행하는 방법이 될 수 있다고 생각해요. (그리고 저는 연산 프로퍼티가 상태보다는 행위에 가깝다고 생각하고 있습니다!)