김서버의 프론트엔드 일기

객체지향의 사실과 오해 (독후감) 본문

혼자 주저리주저리

객체지향의 사실과 오해 (독후감)

kimSerVer 2022. 9. 10. 13:17

 조영호님이 지은 객체지향의 사실과 오해에서 기존에 알고있던 객체에 대한 개념에 대해서 많이 바뀌었는데, 이에 대해서 하나씩 나열하며 적으려고 합니다.

 예시코드가 많이 없어서 설명이 너무 추상적이다라고 생각이 들 수 있지만, 읽다보면 "아 원래 객체지향 프로그래밍은 추상적인 개념일 뿐이구나" 라는 것을 느끼게 됩니다.

객체는 클래스가 아니다

 우리는 흔히 객체 지향 프로그래밍으로 코드를 작성하려면 우선 class를 쓰고부터 시작을 하게 됩니다. 이 책에서는 객체지향 프로그래밍에서의 객체는 개념이지 문법이 아닌 점을 계속해서 강조를 하고 있고, 그런 개념에 대한 설명을 쭉하고 마지막에 예시코드 몇개를 보여주는 것으로 마무리가 됩니다.

 그래서 이 책을 읽을 때, 반드시 객체는 클래스가 아닌 점을 꼭 인지하고 보시면, 훨씬 수월하게 읽히게 될 것 입니다.

 여기서 객체는 여러개의 모듈들로 나뉘어서 하나의 일을 하기 위한 협력하도록 만들어진 추상적인 개념일 뿐이라고 이야기를 합니다.

 예를 들어서 웨이터는 손님을 자리까지 안내하고, 주문을 받고, 음식을 주방으로부터 자리까지 옮겨다 주는 역할을 하고, 주방의 직원은 웨이터로 부터 주문을 받은 것을 확인하여 음식을 만들고, 완성된 음식을 웨이터에게 알려주어서 음식을 가져갈 수 있도록 하는 역할을 하게 됩니다.

 이러한 역할들은 손님이 식당에 방문하고 음식을 먹고 계산하고 나가는 것이라는 일을 통칭 식당 영업이라고 불렀을 때,  식당 영업을 위해 웨이터는 손님 응대라는 책임을 가지고, 주방직원은 음식을 만드는 책임을 가지고 있습니다. 이러한 책임을 가지고 역할을 하며 일을 하고 있는 것들을 객체라고 부르게 됩니다.

객체의 필요한 것들

 객체에서 필요한 것은 식별자, 상태, 행동으로 만들어지게 됩니다. 위의 식당에서 웨이터를 예시로 들겠습니다.

 실제로 식당에 방문하면 웨이터는 여러명이 있을 수 있지만, 그 한명한명은 다른 웨이터입니다. 소프트웨어에서도 이를 구분해야하는데, 객체의 식별자를 통해서 이를 구분하게 됩니다.

 두번째로 웨이터는 그 한명한명이 지금 테이블을 닦고 있을 수도 있고, 주문을 받고 있을 수도 있는 등, 현재 웨이터가 바쁜지 한가한지부터, 웨이터의 외모, 키, 컨디션 등등등 웨이터 한명에 대해서 다양한 상황과 상태를 나타내고 있을 수 있습니다. 소프트웨어에서도 이를 상태로 웨이터를 구분하며 이를 바탕으로 어떻게 일을 시킬 것인가에 대해서 정할 수 있습니다.

 마지막으로 웨이터는 음식을 서빙하고, 주문을 받고, 자리를 안내해주고, 테이블을 닦는 행동을 해야합니다. 이 내용들은 웨이터라고 하면 생각이 드는 책임들로 이 책임은 행동과도 동의어라고 해도 무방할 정도입니다. 그래서 소프트웨어에서도 객체를 하나 만들 때, 어떠한 행동을 하는 객체인지를 먼저 정하는 것이 가장 중요합니다.

 책임주도 설계

 객체지향 프로그래밍을 작성할 때, 가장 중요한 것은 객체가 어떤 상태를 가지는가 보다 어떤 책임을 가지고 어떤 일을 할 것인가가 중요합니다. 

 그러다보니 객체는 특정한 행동만을 할 수 있게 설계가 되어있고, 반드시 다른 객체와 협력하여 일을 할 수 있도록 하여 다른 객체의 책임과 상호작용을 할 수 있도록 설계를 하는 것이, 책임주도설계라고 부릅니다.

마무리

 이외에도 객체지향 프로그래밍 그리고 클래스로 코드를 짜면서 우리가 알고있었던 것들에 대한 개념을 짚어주면서, 객체와 객체가 어떻게 통신을 해야하는지, 그리고 외부에 공개를 해서 상호작용하는 것과 그렇지 않은 것을 구분해야하는지, 클래스를 짜기전에 인터페이스를 짜야하는 이유까지 정말 많은 이야기를 되게 잘 함축되게 쓴 책이라고 느꼈습니다.

 여태까지 리액트로 코드를 짜면서 "리액트는 객체지향이 아니야" 라는 생각을 했었던 저에게 신선한 충격을 주었고, 객체지향은 무엇이 객체지향이고 무엇이 아니다가 아닌, 요구사항을 분석하고 코드를 설계할 때, 그 설계에 대한 개념인 것이라고 생각을 만들어준 책입니다.

 객체지향은 현재 백엔드 개발자들이 많이 활용하는 것으로 알고있는데, 사실 객체지향이 제일 필요한 포지션은 클라이언트 포지션이라고 생각이 들게 해주었고, 그걸 바탕으로 chess게임을 만들면서 코드를 구현했었습니다.

 프론트, iOS, AOS, 게임클라이언트 개발자라면 반드시 이 책을 한번 읽어 보는 것을 추천합니다.

https://github.com/scd7896/THREEJs-CHESS

 

 

 

'혼자 주저리주저리' 카테고리의 다른 글

단위테스트 (독후감)  (2) 2022.11.13