본문 바로가기
better code

객체지향의 사실과 오해

by marble25 2023. 7. 2.

유일하게 변하지 않는 것은 모든 것이 변하지 않는다는 사실뿐이다.
-
헤라클레이토스

처음에 객체지향을 배웠을 때에는 Java를 배우면서 같이 배웠던 개념인지라, 클래스, 상속, 다형성 등을 Java 문법에 빗대어 배웠다. 그래서 객체지향의 본질적인 의미보다는 Java에 적용된 개념과 어떻게 구현하는지를 중심으로 배웠던 것 같다.

하지만 이 책에서는 우리가 널리 알고 있는 앨리스의 예제를 들어서 객체지향에 대해 잘못 알고 있던 개념들을 바로잡아준다. 우리가 중요하게 생각해야 했던 것이 상속같은 지엽적인 내용이 아니라, 객체 사이의 상호작용을 통해 이루어지는 시스템이었던 것임을 깨달을 수 있었다.

  • 시스템 내에서 객체는 책임을 가지고 다른 객체와 소통(협력)을 한다. 같은 책임을 가진다면 다른 객체로 대체할 수 있어야 한다. 메시지는 객체들이 협력하기 위해 사용할 수 있는 유일한 의사소통 수단이고, 메시지는 ‘어떻게’가 아닌, ‘무엇’에 중점을 둔다.
  • 객체는 자율성을 가진다. 메시지를 수신했을 때 어떻게 구체적으로 실행할지는 전적으로 수신자의 메소드에 달려있다. 수신자와 송신자가 결합도가 낮기 때문에 유연하고 확장 가능한 개발이 가능하다. (메세지 큐와 비슷한 producer-consumer 패턴)
  • 소프트웨어 세계에서의 객체는 현실 세계의 추상화가 아니다. 소프트웨어 객체는 현실 객체를 모방한 것이 아닌, 은유를 기반으로 재창조한 것이다. 예를 들어, 영수증이라는 객체를 가정해보자. 현실 세계의 영수증은 그저 정보를 담은 종이 한장일 뿐이지만, 소프트웨어 세계에서는 항목별 가격과 개수를 통해 총 금액을 계산할 수도 있는 능동성을 가지고 있다.
  • 객체는 더 작은 객체로 나뉠 수 있다. 은행에서의 예금 시스템이라는 객체는 예금, 계좌, 이자율, 이자로 나뉠 수 있다. 이들 객체들은 오로지 다른 객체의 요청(메세지)이 올 때에만 행동한다. 이는 micro service architecture와도 잘 들어맞는 개념이라는 생각이 든다.

'better code' 카테고리의 다른 글

헤드퍼스트 디자인패턴  (0) 2023.07.19
리팩터링 - 마틴 파울러  (0) 2023.07.05
[TIL] copy-on-write 방법론 - js에서 퍼포먼스 테스트  (0) 2023.04.22
Clean Code (5/n)  (0) 2022.02.21
Clean Code (4/n)  (0) 2022.02.16