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

[호댕] 자율성을 가지고 있는 코드는 어떤 코드일까요? #6

Open
yanghojoon opened this issue Nov 12, 2021 · 3 comments

Comments

@yanghojoon
Copy link
Collaborator

책을 읽다보면 자율성에 대한 말이 많이 나옵니다!
객체가 충분히 자율적이어야 한다고 하고 있고, 객체 스스로 관리를 하고 외부에서는 접근이 허락된 수단만을 통해서만 객체와 의사소통을 해야 한다고 하고 있습니다.

그렇다면 은닉화와 캡슐화가 이뤄진 코드가 자율성이 있는 코드인 걸까요?

추가적으로 메서드를 분리하는 것이 객체의 자율성을 높이는 핵심 매커니즘이라 하고 있는데 메서드의 기능 분리를 하는 것이 객체의 자율성을 높이는 이유는 무엇일까요?

@yim2627
Copy link
Collaborator

yim2627 commented Nov 12, 2021

저는 은닉화와 캡슐화가 이뤄진 코드가 자율성이 있는 코드가 아닐까요?
이유는 은닉화와 캡슈화가 이뤄진 코드의 경우, 모듈성이 향상된 코드 즉, 독립성이 올라간 코드라고 생각합니다.
독립성이 올라간다면, 해당 모듈을 건드렸다고 다른 모듈에서의 사이드이펙트가 생기는 것을 줄일 수 있기떄문에 자연스레 더 자율적으로 사용할 수 있다고 생각합니다.

메소드를 기능마다 분리하는 것 또한 위와 같은 이유라고 생각합니다

@yanghojoon
Copy link
Collaborator Author

은닉화와 캡슐화를 통해 외부의 접근을 제한하면서 안정성이 생기고 이를 통해 자율성이 확보된다고 이해했습니다.
이를 통해 발생하는 Side Effect을 줄일 수도 있구요!

3장에서 자율성에 대해 조금 더 공부하고 다시 답변을 정리해보도록 하겠습니다!

@hayeonhee
Copy link
Contributor

hayeonhee commented Nov 17, 2021

2장 51쪽 아래부터 '자율'에 대한 이야기가 나옵니다!

"객체지향의 세계에서 객체는 다른 객체의 상태에 직접적으로 접근할 수도, 상태를 변경할 수도 없다. 자율적인 객체는 스스로 자신의 상태를 책임져야 한다. .. 간접적으로 객체의 상태를 변경하거나 조회할 수 있는 방법이 필요하다. "고 하며 행동에 대한 언급을 합니다.

저의 생각을 정리해보자면, 자율적인 객체는 자기의 상태를 스스로 관리하는 객체라고 합니다. 외부에서 상태는 직접적으로 접근하지 못하고 행동을 통해 요청을 보낼 수 있도록 상태와 행동을 캡슐에 담아서 행동만 외부로 노출하는 것이 캡슐화라고 이해했습니다. 요청을 반영할지 말지는 객체가 스스로 선택하는 것이고요. (앨리스와 음료수 예시를 떠올려봅니다..) 그래서 캡슐화를 하게 되면 객체의 자율성을 높일 수 있다고 이해했습니다.

메서드를 분리하는 것이 왜 객체의 자율성을 높이는 것인지 생각을 해보았는데요. 오래도록 책을 뒤적거리다가 발견했어요. 코드로 어떻게 구현될 수 있는지 궁금합니다.
32쪽에서 자율성이 있는 객체는 요청이 왔을 때, 요청에 응할지 말지 - 응한다면 어떤 방식으로 응할지 스스로 결정할 수 있다고 합니다. 그래서 35쪽에서 "외부의 요청이 무엇인지를 표현하는 메시지와 요청을 처리하기 위한 구체적인 방법인 메서드를 분리하는 것은 객체의 자율성을 높이는 핵심 메커니즘"이라고 표현한 것같습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants