조영호님의 '객체지향의 사실과 오해'를 읽다.

송성빈·2024년 6월 9일
post-thumbnail

김영한님의 강의로 자바를 공부하던 중, 객체를 추상화하여 개방-폐쇄 원칙을 적용하는 과정에서 비즈니스 로직을 건드리지 않으면서도 필요에 따라 메서드를 교체할 수 있다는 걸 보고 객체지향의 매력을 느끼게 되었다. 그래서 관련 서적을 찾던 중 조영호님이 쓰신 '객체지향의 사실과 오해' 라는 책을 알게 되어 읽게 되었다.

객체지향이 무엇이냐고 물어보면 일반적으로 실제 사물을 추상화하여 컴퓨터 프로그래밍으로 모방하는 것을 말한다고 설명한다. 실세계를 모방한다는 개념은 객체지향을 기반을 이루는 철학적인 개념을 설명하는 데는 적합하지만 유연하고 실용적인 관점에서 객체지향 분석, 설계를 설명하기에는 적합하지 않다. 소프트웨어의 객체와 실제 사물 사이에 존재하는 연관성은 희미하다. 따라서 객체지향의 목표는 실세계 모방하는 것이 아니라 새로운 세계를 창조하는 것이라고 볼 수 있다.

객체지향에서 각 객체는 책임역할을 가지고 서로 협력하는 관계를 형성한다. 이러한 협력은 메시지를 통해 이루어지며, 객체는 자신의 책임과 역할에 따라 요청을 받고 응답한다. 객체지향의 특성 중 캡슐화라는 것이 있는데, 객체가 자신의 내부 구현을 숨기고, 외부 객체에게는 오직 인터페이스를 통해 상호작용할 수 있도록 하는 개념이다. 아는 지인과 객체지향에 관해 얘기하던 중 이런 비유를 들었다. '본인의 지갑은 본인만 사용할 수 있어야 한다.' 다른 객체에서의 접근을 제한하면 오류가 발생했을 때 그 출처가 분명해지는 장점이 있다고 한다.

객체는 상태(state)와 행동(behavior)을 함께 지닌 실체라고 정의한다. 이 말은 객체가 어떤 협력을 하기 위해 행동을 하려면 그 행동을 하는데 필요한 상태도 있어야 한다는 걸 의미한다. 객체가 협력에 참여하는 과정 속에서 스스로 판단하고 결정하는 자율적인 존재로 남기 위해서는 필요한 행동과 상태를 함께 지내고 있어야 한다. 객체의 자율성은 객체의 내부와 외부를 명확하게 구분하는 것에서 부터 나오는데, 객체의 내부는 스스로 관리하고 외부는 접근이 허락된 수단을 통해서만 의사소통해야 한다. 객체는 다른 객체가 무엇을 수행하는지는 알 수 있지만 어떻게 수행하는지에 대해서는 알 수 없다.

객체지향적인 설계를 하기 위해서는 어떤 객체를 사용할 것인지를 정하는 것이 아니라, 어떤 객체가 필요할 것인가를 정하는 것이 중요하다. 객체지향 설계의 핵심은 도메인을 깊이 있게 이해하고, 각 객체의 책임과 역할을 정의하는 것이다. 이렇게 정의된 객체 간 협력 관계를 설계하는 것이 책임 주도 설계(Responsibility-Driven Design) 의 핵심 원리이다. 객체의 책임과 역할을 정의할 때에는 단일 책임 원칙을 준수해야 한다. 이를 통해 객체의 응집도를 높이고 결합도를 낮출 수 있다. 책임 주도 설계의 장점은 유연하고 확장 가능한 설계가 가능하며, 객체의 자율성과 재사용성이 향상된다는 것이다.

0개의 댓글