[리뷰] 객체지향의 사실과 오해

남궁진 (jinvicky)·2024년 4월 17일

Book-Review

목록 보기
1/4
post-thumbnail

Summary


객체지향의 오해가 뭘까?
객체지향하면 "객체지향은 실세계의 모방 개념이다"라고 하지만 실제로 소프트웨어 객체와 실제 사물과의
연관성은 매우 희미하다. 또한 클래스도 마치 도시전설처럼 과대포장된 존재다.

소프트웨어 객체는 자율적이고 능동적인 객체로서 책임을 수행한다.
실제 사물은 스스로 무언가를 하는 주체가 아니지 않은가.

객체가 맡은 역할은 대체 가능하고, 한 사람이 여러 개를 수행할 수 있으며, 역할을 수행하는 방식은 사람마다 다르다.

설계를 할 때 클래스 관점에서 메시지를 주고받는다고 생각하지 말고, 객체 관점에서 바라보아야 한다.

역할을 어느 정도로 추상화 할것인가가 중요 관건이다.
단순히 '말하라'는 너무 추상적이다. 그렇다고 일일이 '지난 기억을 더듬어 구체적으로 말해보아라'는
역할을 수행하는 방식을 지나치게 제한한다.
중간 지점은 '증언하라'가 가장 적절한 추상화다.

객체 간의 좋은 협력을 설계하려면 먼저 메시지를 정하고, 메시지가 객체를 선택하도록 하는 것이 바람직하다.

인터페이스는 내부 구조, 동작, 방식을 몰라도 접근, 조작이 가능한 장치다.

좋은 설계를 위해서는 유지보수, 변경의 여지를 염두에 두면서 해야 한다.
변경에 유리한 설계를 하려면 세부 기능이 아니라 구조를 기반으로 모델을 구축해야 한다.

클래스를 바라보는 3가지 관점이 있다.
개념 관점은 사용자가 도메인을 바라보는 관점이고,
명세 관점은 소프트웨어 객체에 초점을 맞춘 관점이고,
구현 관점은 객체 책임을 어떻게 수행할 것인가에 맞춘 관점이다.
다른 클래스를 보면서 이 3가지 관점을 파악하고, 내 코드에 3가지 관점이 보이지 않는다면 고쳐야 한다.

Review


코딩 잘하는 법 이런 쪽이 아니라 객체지향 설계에 대한 이론 책이다. 그래서 경험이 적은 나로서는 확! 와닿는 책은 아니었다.

다만 다른 사람의 코드를 볼 때 이 책에서 말했던 부분을 고려해서 보기 시작했다.
어떻게 클래스가 사용되고 협력되는 지 계속 관찰하고 뜯어보는 것이 필요해 보인다.

profile
문제를 차근차근 하나씩 해결하려고 합니다:)

0개의 댓글