사실상 거의 미루어뒀던 책 읽기 챌린지가 되어가고 있는 것 같아요..
이 책은 작년 GDSC 활동 당시 코어멤버셨던 선배의 추천으로 구매해뒀던 책입니다. 하지만 당시의 나는 객체 지향은 커녕 기본적인 개발 지식도 많이 부족한 상태였어요.
하지만 그래도 나름 이제는 학교에서 관련 수업도 조금은 듣고, 엘리스 부트캠프 백엔드 트랙에서 자바로 스프링을 배우고 있으니.. 읽을 자격이 되지 않을까 생각이 들어 다시 들게 되었습니다.
그럼 지금까지 읽은 부분에 대해서 정리하며 작성해보겠습니다.
여러분은 객체 지향이라는 개념을 알고 계신가요?
저자는 많은 사람들이 동의할 공통적인 특징이 있긴 하지만, 이런 질문에 정답이란 존재하지 않는다고 이야기합니다. 그러면서 많은 개발자들이 객체 지향이라는 개념을 정확히 이해하거나 정의하지 못하면서 사용하고 있다는 점을 지적하며 책을 시작합니다.
이 책은, 이 질문에 저자 나름의 대답을 제시하며 풀어나갑니다.
01. 협력하는 객체들의 공동체
객체란 현실 세계에 존재하는 사물에 대한 추상화입니다. 그러면서 객체지향 소프트웨어는 실세계의 투영이 되는 것이죠.
철학적이지만, 실용적이지 못한 이 설명은 비유를 통해 나름대로 객체 지향에서 중요한 개념을 설명할 수 있도록 해줍니다.
중요한 개념은 바로, 역할과 책임, 그리고 협력입니다.
바로 이 책의 부제목이죠.
책에서 제시된 예시를 들어보겠습니다.
손님이 어느 카페에서 음료를 산다고 가정해보면 손님은 캐셔에게 커피를 주문하고, 바리스타는 그 주문을 전달받아 제조합니다. 제조받은 커피를 다시 건네받은 손님은 이제 만족스럽게 카페를 나서게 됩니다.
이 과정에서, 손님과 캐셔, 바리스타는 협력하고 있습니다. 하나의 작업 과정 속에서 서로를 도우며 일을 해나가고 있습니다. 그러면서도 각각의 역할이 있죠. 손님은 커피를 주문하고, 캐셔는 주문을 받고, 바리스타는 커피를 만듭니다. 이러한 역할을 성실히 수행해나가기 위한 각각의 책임은 작업이 성공적으로 마무리되도록 돕습니다.
이렇게 실생활에서 볼 수 있는 관계를 소프트웨어적인 용어로 바꿔봅시다.
손님과 캐시어 등, 사람을 객체 로,
주문 내용 등의 요청을 메시지 로,
요청을 처리하는 방법 자체를 메서드 로 바꾸게 되면 개발자들에게 익숙한 흐름이 보입니다.
객체 간 메시지를 메서드를 통해서 전달한다는 개념이죠.
따라서 애플리케이션은 적절한 객체에게 적절한 책임을 할당하였을 때 비로소 바람직한 객체 지향 설계가 되었다고 볼 수 있습니다.
적절한 객체는 어떤 식으로 구성할 수 있을까요?
책에서는 크게 두 가지 덕목을 제시합니다.
첫 번째는 '충분히 협력적이어야 한다.'
두 번째는 '충분히 자율적이어야 한다.' 입니다.
객체는 외부의 도움이나 기타 객체의 도움 없이 전지전능할 수 없습니다. 그렇기에 서로의 도움이 필요하지만, 다른 객체의 명령을 따르는 수동적인 존재가 아닌 요청에 응답하는 존재여야 합니다.
각 객체는 서로의 행동의 목적은 알지만, 행동의 과정이나 방법은 알지 못하죠. 각자의 상태와 행위를 묶어 존재하며, 스스로 판단하여 작업을 수행할 수 있도록 객체를 설계하는 것이 이상적인 '객체 지향'이 되는 것입니다.
이렇게 설계 되어야 비로소 유지보수가 쉬우며, 재사용이 용이한 시스템이 구축됨을 알 수 있습니다.
결과적으로, 클래스의 구조와 메서드가 아닌 객체의 역할, 책임, 협력에 집중하여야 비로소 '객체 지향을 하고 있다'고 할 수 있을 것입니다.
사실 읽은 부분이 이번에 많지 않아요. 하지만 첫 챕터를 읽으며, 이야기와 내용을 이해할 수 있게 되었다는 점에서 상당히 기뻤습니다.
배우면 배울수록 배울 기회가 더 많아진다는 것을 이번 기회에 느끼게 되어 감사했습니다.
책과 관련해서는 책의 문장력이 좋아서 조금은 쉽게 읽혔다는 점이 너무 좋았습니다. 개념 설명과 예시가 잘 들어맞아 한 번에 내용을 이해할 수 있었어요. 객체 지향이라는 개념에 대해서 단순히 그렇구나, 하고 넘어갔지만 이번 기회에 제대로 고민하고 이해할 수 있을 것 같아 기대가 됩니다!
해당 게시글은 GDSC HUFS 2024 북적북적 스터디 활동을 위해 작성되었습니다.
'Book' 카테고리의 다른 글
<Book> 딥 워크 (칼 뉴포트) - 민음사 (3) (0) | 2024.05.10 |
---|---|
<Book> 딥 워크 (칼 뉴포트) - 민음사 (2) (0) | 2024.04.27 |
<Book> 딥 워크 (칼 뉴포트) - 민음사 (1) (0) | 2024.04.10 |