[서평] 객체지향의 사실과 오해

hyejineee🧞‍♂️·2021년 1월 24일
1

객체지향

목록 보기
1/2
post-thumbnail

객체지향에 대한 개념을 잡기에 좋은 책인 것 같다. 처음 자바를 공부하면서 객체지향에 대해 공부할 때 이 책을 봤으면 좋았을 것 같단 생각을 한다. 이 책을 읽고 나면 객체 지향을 잘 할 수 있을 것 같지만 그렇지 않다. 실제로 책에 나오는 예제들을 코드로 구현하고 나면 이게 객체 지향이 맞는 건가 싶다. 구현이라는 산이 남았다. 어떤 메커니즘을 선택하여 구현해야 할까? 공부엔 끝이 없다...🤪

👉🏻 객체지향의 사실과 오해 예제 repo

이 책은 객체지향을 이루는 객체와 객체 간의 관계(메시지, 책임, 역할, 협력)에 대해 학습함으로써 우리가 잘 못 알고 있었던 것에 대해 알고 새로운 관점으로 객체 지향을 바라볼 수 있게 한다. 커피 전문점 도메인을 구현함으로써 객체지향이 어떤 단계로 이루어지는지 살펴본다. 클래스를 개념, 명세, 구현 관점으로 바라봄으로써 기존에 잘 못 구현한 객체지향 코드에 대해서 반성하는 시간을 가질 수 있게 한다.

객체지향이란 무엇인가요?

객체지향은 프로그램을 자율적으로 책임을 수행하는 객체들 간의 협력으로 소프트웨어를 바라보는 프로그래밍 패러다임이다. 소프트웨어 세계 안에서 객체들은 공통의 목표를 위하여 자신들이 수신할 수 있는 메시지를 통해 협력한다. 또한 자신이 메시지를 처리할 방법에 대해서 자율적으로 선택할 수 있다. 이는 유연하고, 확장 가능하고, 재사용 가능한 소프트웨어를 만들 수 있도록 한다.

객체지향의 사실과 오해는 무엇인가요?

오해
1. 객체지향 소프트웨어는 현실 세계의 반영이 아니다.
2. 객체지향에서 중요한 것은 클래스가 아니다.

사실
1.객체지향 세계와 현실 세계의 관계는 은유다. 은유를 통해 객체 지향 신세계를 창조해야 한다.
2. 클래스는 단지 타입을 구현할 수 있는 여러 구현 메커니즘 중 하나이다. 객체지향을 클래스가 아니라 메시지를 주고받으면서 협력하는 객체의 관점으로 바라보아야 한다.

왜 객체 지향으로 설계해야 할까요?

객체지향은 도메인 모델을 통해 현실 세계를 은유하여 소프트웨어 구조를 만드는 것부터 시작한다. 책을 읽다 보면 인간의 인지에 대한 실험 또는 그림으로 예시로 드는 것을 많이 볼 수 있다. 객체 지향은 우리가 살아가면서 현실 세계의 복잡성을 줄이는 방법을 소프트웨어 세계에서 그대로 사용한다.

자주 변하지 않는 안정적 구조인도메인을 을 기반으로 하여 변경에 대해 유연하게 대처할 수 있도록 한다.

어떻게 객체 지향적으로 설계할 수 있을까요?

우리가 해결하고자 하는 문제의 영역을 도메인 모델로 만든다.

도메인 모델은 사용자가 프로그램을 사용하는 대상 영역에 관한 지식을 선택적으로 단순화하고 의도적으로 구조화한 형태이다.

개발자는 도메인 모델에 대한 은유를 통해 소프트웨어와 현실 객체 사이의 의미적 거리를 줄일 수 있다.

객체를 움직이게 할 수 있는 것은 오직 메시지뿐이다. 기능을 구현하기 위해서 어떤 메시지가 필요한지 파악해야 한다. 필요한 메시지를 선별하고 나면 도메인 모델에서 해당 메시지를 처리할 수 있는 적절한 객체를 선택한다.

아래 내용은 내가 실제로 예제들을 만들어 볼 때 도움이 되었던 내용들이다. 처음 예제를 만들려고 했을 때 주저하는 부분이 있었지만 아래 내용을 생각하면서 일단 해보았다.(아직 객체 지향적으로 잘 구현했다.라고는 말할 수 없다.)

설계 작업은 구현을 위한 스케치를 작성하는 단계지 구현 그 자체일 수는 없다. 중요한 것은 설계가 아니라 코드다. 따라서 협력을 구상하는 단계에 너무 오랜 시간을 쏟지 말고 최대한 빨리 코드를 구현해서 설계에 이상이 없는지 설계가 구현 가능한지를 판단해야 한다.

설계를 간단히 끝내고 최대한 빨리 구현에 돌입하라. 설계가 제대로 그려지지 않는다면 고민하지 말고 코드를 작성해 가면서 협력의 전체적인 밑그림을 그려보라. 테스트-주도 설계로 코드를 구현하는 사람들이 하는 작업이 바로 이것이다. 그들은 테스트 코드를 작성해 가면서 협력을 설계한다.

profile
여기 저기 관심이 있는 안드로이드 개발자 입니다. 🤟🏻🤟🏻

0개의 댓글