객체지향의 사실과 오해를 읽고 느낀 점
해당 글은 "객체지향의 사실과 오해 - 조영호"라는 책을 읽고서 느낀점을 자유롭게 작성한 글입니다.
따라서 대부분 개인적인 의견임을 참고해주세요!
객체지향.. 이게 맞나?
객체지향에 대해서 대학교 및 개인적으로 어느 정도 찾아보면서 '객체지향이란 이런 것이다'라는 대략적인 개념은 이해하고 있었으나, 오직 C언어만 사용한 개발을 해오던 입장이었기에 직접적인 연관이 없다고 생각하여 제대로 공부를 한 적이 없었다.
그러다가 웹 개발자로 전향을 생각하고 퇴사 후 Java를 공부하면서 객체지향에 대해 자세히 공부를 하게 되었는데.. 개념과 이론만 보고 있자니 이게 무슨 말인가 싶은 내용도 있고, 이걸 어떻게 코드에 녹여야 하는 걸까?라는 고민에 빠지게 되었다.
그렇게 코드를 구현하며 '대강 이런 식이구나~'라는 생각을 하며 객체지향에 대한 스스로의 개념을 정립해나가고 있었을 무렵, "객체지향의 사실과 오해"라는 책의 존재를 알게 되어 구매 후 읽게 되었다.
책을 읽기 시작하면서
책의 도입부는 비전공자라도 쉽게 이해를 할 수 있도록 적절한 예시를 들어가며 기반을 다질 수 있도록 잘 구성되어 있다고 생각했으나, 이미 어느 정도 이런저런 지식을 알고 있는 상태에서 읽기 시작한 것이라 그런지 책에서 설명하는 내용과 알고 있던 내용들이 대립하며 '이게 뭐지? 이 내용은 이거 아닌가?' 같은 혼란에 빠지기도 했다.
아무래도 자세하게 '이건 이거고 저건 저거다'라는 내용을 담기보단 포괄적으로 설명하며 "객체지향은 이런 거다!"라고 설명을 하기 위함이라고 생각을 하며 '일단 혼란스러워도 끝까지 읽어나가자!'라는 생각으로 느리더라도 끝까지 읽어나가기 시작했다.
객체지향.. 이게 맞다!
원래부터 책 읽는 속도가 매우 느린 편인데, 책을 읽는 중간중간 Spring에 대한 공부도 병행을 하다 보니 며칠에 걸쳐 다 읽은 건지.. 몇 주는 걸린 것 같다.
아무튼 매우 느렸지만 결국에는 다 읽었고, 정말 읽기를 잘 했다고 생각을 함과 동시에 객체지향에 대한 개념이 헷갈리는 사람이 있다면 무조건 추천해 주고 싶은 책이었다.
전공자면서 C언어 개발을 해왔었지만 확실하게 "객체지향은 뭐다!"라고 표현할 수 없었던 상태에서 해당 책을 읽고 난 후 객체지향이 무엇인지에 대하여 확실하게 정의할 수 있게 되었기 때문이다.
짧고 간단하게 설명하자면 책에서 계속해서 언급되는 이야기로써 "객체의 역할, 역할에 따른 책임, 그리고 객체간의 협력"이라고 표현할 수 있겠다.
여기서 가장 중요한 것은 "객체"가 아닌 "역할과 책임"이다. 이에대한 자세한 내용은 책을 읽어보는 것을 추천한다.
참고로 객체가 중요하지 않다는 이야기는 아니다. 어떠한 것이 더 중요한가의 이야기라고 보면 된다.
정리
책을 읽기 전
객체지향이란 모든 것을 객체로 바라보며, 각 객체는 한가지에 특화된 데이터 및 동작으로 구성된다.
따라서 객체를 중점으로 어떠한 객체들이 있어야하며, 각 객체에 어떠한 동작(메서드 및 책임)이 필요한지 고민하며 구현해나가야 한다.
라고 생각을 했었다.
책을 읽은 후
객체지향이란 필요한 역할을 찾아 각각의 역할에 따른 책임을 부여한 후 해당 역할에 맞는 객체를 찾아 할당하고, 이렇게 할당된 객체간의 협력을 통해 구현된다.
즉, 역할에 따른 책임을 찾은 후 객체에 대해 생각을 해야 한다는 의미이다.
해당 내용을 Java 기준으로 풀어보자면 Interface를 통해 역할을, 메서드를 통해 책임을 부여하며 이를 적절한 객체에 할당하여 객체간의 협력으로 기능을 구현해야 한다고 볼 수 있다.
여기서 메서드 구현 시 "묻지 말고 시켜라(Don't ask, just tell)"라는 원칙에 따라 데이터를 받아와 처리하는 게 아닌 필요한 내용을 요청하는 방식으로 내부의 동작을 감추고 캡슐화하여 결합도를 낮추고 각 객체의 자율성을 높여야 한다.
라는 등의 생각을 갖게 되었고, 이러한 내용을 자연스럽게 TDD에 접목하여 생각해 볼 수 있었다.
글을 잘 못쓰다 보니 느끼고 생각한 내용들을 전부 전달 못 한 것 같아서 아쉽지만.. 간단하게 정리를 하자면 다음과 같다.
읽으면서 '와! 예시를 이렇게 잘 들면서 설명을 하다니.. 대단하다..'라는 생각을 하며 읽을 정도로 좋은 예시를 제시하며 이해하기 쉽게 설명을 이어나간 책이었다. 그렇기에 해당 책은 무조건 추천을 한다!
하지만, 이 책을 읽는다고 코드 구현에 도움이 된다! 보다는 설계 및 개발에 대한 생각에 도움이 된다고 할 수 있겠다.
따라서 코드 구현에 대한 내용을 원한다면 권하지 않고, 객체지향이란 무엇인가? 설계는 어떻게 해야 하는가? 등에 대한 개념을 잡고자 한다면 추천한다.
즉, 객체지향에 대해 확실한 개념을 잡고 싶으신 분 또는 설계에 대한 개념을 잡고 싶으신 분에게 무조건 추천한다.
이후에
읽고 싶은 책들은 많은데 너무 느린게 문제라 고민이지만..
일단 다음으로는 "함께 자라기 - 김창준"라는 책을 읽으려고 한다. 최대한 빨리 읽고 후기를 남길 수 있기를...
이후 앞으로 우선적으로 읽을 책으로는 "도메인 주도 개발 시작하기 - 최범균", "헤드 퍼스트 디자인 패턴 - 에릭 프리먼 외 3인", "오브젝트 - 조영호", "클린 코드 - 로버트 C. 마틴", "이펙티브 자바 - 조슈아 블로크", "토비의 스프링 3.1 세트 - 이일민" 등이 있지만 언제 다 읽게 될지는 미지수다..