객체지향의 사실과 오해 리뷰(1) 01~02

Bryan Lee 2022. 4. 30. 19:18

이 책을 선택한 이유 

- 자바 객체지향 관련된 책으로 워낙 유명한 책이고,

  또 이동욱님이 블로그에서 언급하신 것을 보고 구입했다. 

 

배운 점

 

01 협력하는 객체들의 공동체

 

- 소프트웨어 개발자의 역할은 단순히 실세계를 소프트웨어 안으로 옮겨 담는 것이 아니라

  고객과 사용자를 만족시킬 수 있는 신세계를 창조하는 것이다. 

-> 신세계를 창조한다는 것이 뭘까?

    결국은 소프트웨어의 세계는 그것만의 규칙에 따라 운용되는 것이라고 볼 수 있다. 

 

- 객체지향의 근본 개념은 실세계에서 사람들이 타인과 관계를 맺으며,

   협력하는 과정과 유사함

-> 객체간의 협력, 그리고 원활한 협력을 정의하는 것이 객체지향의 핵심이다. 

 

- 클래스가 객체지향 프로그래밍 언어의 관점에서 매우 중요한 구성요소인 것은 분명하지만,

  객체지향의 핵심을 이루는 중심 개념이라고 말하기에는 무리가 있다. 

-> 클래스는 객체를 생성하기 위한 틀을 정의한 것이고,

    핵심은 객체 간의 협력, 그리고 그 협력을 정의하는 것이다. 

 

- 훌륭한 객체지향 설계자가 되기 위해 거쳐야 할 첫 번째 도전은  

  코드를 담는 클래스의 관점에서 메시지를 주고 받는 객체의 관점으로  

  사고의 중심을 전환하는 것이다. 

 

 

02 이상한 나라의 객체

 

- 객체지향에 갓 입문한 사람들이 가장 쉽게 빠지는 함정은 상태를 중심으로 객체를 바라보는 것이다.

  초보자들은 먼저 객체에 필요한 상태가 무엇인지를 결정하고,

  그 상태에 필요한 행동을 결정한다. 

 

- 협력에 참여하는 훌륭한 객체 시민을 양성하기 위한 가장 중요한 덕목은 

   상태가 아니라 행동에 초점을 맞추는 것이다. 

   객체는 다른 객체와 협력하기 위해 존재한다. 

-> 객체는 '행위'를 한다. 따라서 객체가 '어떤' 행위를 '누구'와 하느냐를 정의하는 것이

    곧 객체지향의 설계이다. 

 

- 흔히 객체지향을 현실 세계의 추상화라고도 하는데, 그 안에는 현실 세계를 모방해서

  단순화한다는 의미가 숨어 있다. 

  여기서 추상화(abstraction)란 실제의 사물에서   

  자신이 원하는 특성만 취하고 필요 없는 부분을 추려 핵심만 표현하는 행위를 말한다.

-> 객체를 정의하는 것의 전제는 객체는 '추상화'된 대상이라는 것이다.