독서

[객체지향의 사실과 오해] 상태보다 행동을 먼저 생각할 것

znvlcm 2022. 7. 21. 15:12

내가 자바를 처음 배울 때 아래와 같이 말씀하시며 

객체를 이해하지 못하는 우리를 선생님은 정말 이해할 수 없다는 표정이셨다. 

"객체는 세상에 존재하는 모든 것을 말해요"

.... 오 심오해... 근데 전혀!!!!! 와닿지가 않....

나는 객체의 정의를 듣고 한달정도 되는 날. 

동기들과 술을 마시고, 객체가 뭔지 모르겠다며 객체 학원에 등록해야한다고 했다고 한다. 

그 날의 기억은 내 뇌에 남아 있지않고, 지금은 술을 그렇게 마시지 않는다.  

다만, 객체가 내게 오기까지 너무 오랜기간 괴로웠다. 

근데.... 이 책을 보고 나는 결국 객체지향을 잘못 알고 있었다고 생각한다. 

 

프로젝트를 진행할 때 나는 클래스를 수도없이 수정한다. 

이 책을 읽으면서 나는 클래스를 수정하면서 왜 그리 어려웠는지 알았다. 

바로 나는 상태를 행동보다 먼저 정했다. 

객체지향의 핵심은 역할과 책임과 협력인데. 

클래스의 상태를 먼저 생각하다보니 역할과 책임이 중복되는 경우가 많았고 

객체가 협력을 하기에 좋은 설계를 하지 못했다. 

 

무작정 클래스를 먼저 정의하고 그 상태인 변수의 제어를 위한 메소드를 나중에 만들다보니, 

협력을 위한 책임과 역할을 분리하기 보다는 내가 정의한 클래스가 가져야한다는 변수를 부여하고 

그 변수를 제어하는 메소드를 추가하게 되었다. 

기능은 잘 돌아갔지만 문제는 기능이 바뀌거나 추가될 때 비슷한 책임과 역할을 갖는 모든 애들이 다 수정되야하는 거였다. 

 

이 책을 읽으니 원하는 행동들을 우선 정하고 나서 이에 따라 책임과 역할을 나누는 것이 객체 지향인 것을 알았다.

행동에 따른 협력을 생각하며 책임과 역할을 나누면 행동에 필요한 책임과 역할부분만 수정하면 되는 거였다. 

 

아직도 여전히 완벽하게 휼륭한 객체 지향에 따른 설계는 어렵고 

제대로 이해한 것인지 헷갈린다. 

책을 읽고 나서 음 그 개념대로 해야지 하다가도 

프로젝트의 기능을 만드려면 어떻게 적용되어야하지? 는 아주 많이 어렵다. 

 

그래도 한 가지 분명한 것은 우선 행동을 정의하고 그에 따라서 클래스를 만들어보고자 한다. 

적어도 그렇게 한다면, 두 개 이상의 클래스에서 중복된 프로퍼티를 보면서 이걸 분리해 말아를 고민하지 않을 것이기에. 

 

이 책은 자주 읽어보아야겠다. 

이번 책은 세세하게 정리하면서 읽진 않고 다 읽고나서 머리에 남은 것만 정리를 했다. 

 

일단 객체지향의 가장 중요한 개념은 역할, 책임, 협력이고 

객체지향에서 객체간에는 메세지로 대화한다. 

그 내부는 캡슐화를 통해 메세지에 대한 역할과 그 책임만 다하고 

어떤 식으로 이뤄지는지 밖에서 알려주거나 알 수 없도록 자율성이 보장되어야한다는 점이다. 

 

읽을 수록 수정되는 내용을 많을 것 같은 책이다. 

 

 

 

 

728x90

'독서' 카테고리의 다른 글

[개발서] 독서계획  (0) 2022.05.20