객체지향의 사실과 오해를 읽었다.

1

독서

목록 보기
4/5

코드숨 스터디로 '객체지향의 사실과 오해' 를 읽었다.

책에서 인상깊게 읽었던 부분들을 기록한다.

  • 객체지향의 핵심은 클래스가 아니다. 핵심은 적절한 책임을 수행하는 역할 간의 유연하고 견고한 협력 관계를 구축하는 것이다.
  • 객체를 상태(state), 행동(behavior), 식별자(identity)를 지닌 실체로 보는 것이 가장 효과적이다.
  • 소프트웨어 객체를 창조할 때 우리는 결코 현실 세계의 객체를 모방하지 않는다. 오히려 소프트웨어 안에 창조하는 객체에게 현실 세계의 객체와는 전혀 다른 특징을 부여하는 것이 일반적이다. 소프트웨어 객체가 현실 객체의 부분적인 특징을 모방하는 것이 아니라 현실 객체가 가지지 못한 추가적인 능력을 보유하게 된다.
  • 지하철을 갈아탈 때 지형 때문에 골치 아플 필요가 있을까요? 지형은 중요한 것이 아닙니다. 중요한 것은 연결, 즉 열차를 갈아타는 것입니다.
  • 메시지가 아니라 데이터를 중심으로 객체를 설계하는 방식은 객체 내부 구조를 객체 정의의 일부로 만들기 때문에 객체의 자율성을 저해한다.
  • 기능을 중심으로 구조를 종속시키는 접근법은 범용적이지 않고 재사용이 불가능하며 변경에 취약한 모델을 낳게 된다. 이와 달리 안정적인 구조를 중심으로 기능을 종속시키는 접근법은 범용적이고 재사용 가능하며 변경에 유연하게 대처할 수 있는 모델을 만든다.
  • 개념관점(Conceptual Perspective), 명세 관점(Specification Perspective), 구현 관점(Implementation Perspective)

그 외에도 좋은 내용이 많지만 다 적기엔 너무 많아서 여기까지만 써야될 것 같다.

객체지향은 현실 세계를 코드로 구현해 놓은 것이라는 이야기를 자주 들었는데, 실제로 코드에서는 실제 객체가 하지 못하는 추가적인 기능을 한다는 구절이 굉장히 인상깊게 들어왔다.

전혀 생각도 못했던 부분이라 신선했다. 여태 잘 아는 개념이 아니어서 몰랐는데 말로만 들었을 땐 현실의 객체를 그대로 옮겨야 한다고만 생각했었다. 그런데 실제로는 코드의 객체에게 더 자율성을 부여해야 매끄럽게 돌아간다니.

그 다음으로는 기능 중심으로 시작하는게 아니라 구조를 중심으로 접근해야 한다는 부분이었다.
아무 생각 없이 코드를 짜면 대부분 기능 중심으로 코드를 작성하게 된다.
클라이언트가 구조를 말하는게 아니라 원하는 기능을 말하기 때문에 개발도 그에 맞춰서 진행하면 그렇게 되기 마련이다.
그리고 뭔가 수정사항이 생기면 힘들어지는 일의 반복이었는데, 구조 중심으로 설계를 하면 그런 변화들까지 흡수하면서 개발이 가능하다는 것이 굉장히 매력적으로 느껴졌다.
아직 잘 이해는 안되지만 좀 더 공부해서 도메인 주도 설계와 디자인을 제대로 익히고 싶다.

그리고 마지막으로는 공용 인터페이스를 주고받는 구조로 개발을 하라는 것.
전에 아샬님의 영상 항상 API를 만들자 에서 주고받는 형식은 그대로 유지하면 내부를 어떻게 하든 사용하는 쪽에서는 신경 쓸 필요가 없다는 말을 듣고 인상깊었는데 상통하는 내용이라 더 열심히 보게 되었다.

객체가 내부에서 처리하는 방식이 어떻게 바뀌든 인터페이스를 통해 전달되는 메시지는 동일해야 하기 때문에 다른 객체들은 이 부분에 대해 신경 쓸 것이 없다는 것이다.
나는 여태 뭔가 바꾸거나 하면 그에 관련된 모든 코드가 다 영향을 받았다.
하지만 인터페이스를 통해 메시지를 주고받게 되면 내부에서 어떻게 바꾸든 상관없다는걸 보고 앞으로는 그렇게 개발해보려 한다.

함수형에 대한 스터디를 하다가 객체지향 책으로 스터디를 해보니 이쪽도 굉장히 매력적이구나 하는걸 느꼈다.
다음 스터디로는 '루비로 배우는 객체지향 디자인'을 읽는데, 굉장히 기대가 된다.

profile
지상 최강의 개발자 쥬니니

0개의 댓글