위키북스에서 펴낸 객체지향/도메인 주도 설계 책을 소개합니다!
그동안 위키북스에서는 객체지향이나 도메인 주도 설계에 관한 책을 여러 권 펴낸 바 있는데요, 이번 글에서는 관련된 책들을 살펴보고 어떤 특징이 있는지 살펴보려고 합니다.
객체지향에 대한 책을 알아보기에 앞서 먼저 객체지향 프로그래밍이란 무엇이고, 왜 필요한지에 대해서도 간략하게 짚고 넘어가려고 합니다.
위키피디아에서는 객체지향 프로그래밍을 다음과 같이 정의합니다.
객체지향 프로그래밍은 프로그래밍 패러다임의 일종으로 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다.
객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다. 또한 프로그래밍을 더 배우기 쉽게 하고 소프트웨어 개발과 보수를 간편하게 하며, 보다 직관적인 코드 분석을 가능하게 하는 장점을 갖고 있다.
위키피디아에 설명된 바와 같이 객체지향 프로그래밍은 대규모 소프트웨어 개발에서 유용성을 입증받았기 때문에 오늘날 가장 널리 사용되는 프로그래밍 패러다임으로 자리 잡았습니다. 프로그래밍 언어 차원에서도 Java를 비롯해 C++, C#, Python, Ruby 등의 수많은 언어가 객체지향 프로그래밍을 지원하며, 객체지향 설계 원칙(SOLID), 디자인 패턴 등과 같은 객체지향을 기반으로 하는 기법들이 만들어져 갖가지 프레임워크나 라이브러리 등에도 활용되고 있습니다.
객체지향은 오늘날 점차 복잡해지는 소프트웨어 프로젝트 현장에서 가장 널리 채택되는 패러다임이자 좀 더 정립된 체계와 기법, 커뮤니티를 갖추고 있기에 소프트웨어 개발자에게 있어 객체지향의 이해는 필수적입니다. 특히 국내에서는 전자정부 표준프레임워크의 기반이자 사실상 업계 표준으로 자리 잡은 스프링 프레임워크의 활용도가 높은 편이고 다른 소프트웨어 프로젝트도 상당수 객체지향 패러다임을 기반으로 하기에 객체지향에 대한 기반 지식을 탄탄하게 갖출 필요가 있습니다.
그런데 이러한 객체지향 프로그래밍의 정의와 기본 개념, 그리고 추상화, 캡슐화, 상속, 다형성으로 대표되는 객체지향의 특징에 대해서는 설명하는 책이 많지만 정작 ‘객체지향이란 무엇인가?’라는 질문에 답하는 책은 많지 않습니다.
위키북스에서 펴낸 저자 조영호 님의 역작 《객체지향의 사실과 오해》와 《오브젝트》는 앞에서 언급한 '객체지향이란 무엇인가?'라는 원론적인 질문의 대답으로 쓰인 책입니다.
《객체지향의 사실과 오해》의 서문에는 다음과 같이 객체지향으로 향하는 네 걸음을 소개합니다.
첫 번째 걸음. 클래스가 아니라 객체를 바라본다.
두 번째 걸음. 객체를 독립적인 존재가 아니라 기능을 구현하기 위해 협력하는 공동체의 존재로 바라본다.
세 번째 걸음. 협력에 참여하는 객체에게 적절한 역할과 책임을 부여한다.
네 번째 걸음. 앞서 설명한 개념들을 사용 중인 프로그래밍 언어라는 틀에 흐트러짐 없이 담아낸다.
이러한 네 걸음 가운데 《객체지향의 사실과 오해》는 첫 번째와 두 번째 걸음에 초점을 맞춰 객체지향에 대한 기존의 잘못된 관념들을 바로잡는 내용을 담고 있습니다. 즉, 객체지향에 관한 잘못된 편견과 선입견의 벽을 하나씩 무너트려가면서 객체지향이 추구하는 가치를 전달하는 데 목적을 둔 책입니다. 특정한 기술이나 언어를 설명하는 것이 아닌 객체지향적으로 세상을 바라본다는 것이 무엇을 의미하는지를 설명하고, 특히 클래스보다는 객체를 객체지향의 중심에 두고, 객체를 독립적인 존재가 아니라 기능을 구현하기 위해 협력하는 공동체의 일원으로 바라보는 측면에 초점을 두고 객체지향의 본질을 되짚어봅니다.
다음 책인 《오브젝트》는 세 번째와 네 번째 걸음에 초점을 맞춰 객체지향 및 객체지향 설계를 설명합니다.
이 책은 객체지향으로 나아가기 위한 네 걸음 중 세 번째, 네 번째 걸음을 다룹니다. 즉, 객체지향적으로 프로그래밍하는 데 있어서 책임의 할당과 그 구현에 초점을 맞춥니다. 객체에 적절한 역할과 책임을 부여하는 방법과 유연하면서도 요구사항에 적절한 협력을 설계하는 방법을 익힐 수 있으며, 나아가 프로그래밍 언어라는 도구를 이용해 객체지향의 개념과 원칙들을 오롯이 표현할 수 있는 방법 또한 익힐 수 있습니다. 주로 자바를 이용해 객체지향 설계를 수행하는 과정을 자세히 설명합니다.
앞서 소개한 조영호 님의 책과 더불어 2020년에 출간한 《오브젝트 디자인 스타일 가이드》는 객체지향 코드를 작성하는 여러 실전적인 기법들을 제시합니다.
《오브젝트 디자인 스타일 가이드》는 객체지향 설계에서 자주 접하게 될 다양한 상황에서 지켜야 할 설계 규칙이나 모범 사례를 제시하기 때문에 객체지향 설계를 기반으로 하는 프로젝트를 진행하거나 팀 단위로 객체지향 설계 지침을 마련해야 할 때 유용합니다. 각 장마다 객체 설계와 관련된 문제와 해답을 제시하기에 본문에서 익힌 객체 설계 기법을 검증할 수 있고, 본문에 등장하는 예제에는 저자가 직접 고안한 언어를 사용하기에 특정 언어에 국한되지 않고 객체지향 설계 기법을 연마할 수 있습니다.
도메인 주도 설계(Domain-Driven Design)는 소프트웨어 코드의 구조와 언어가 비즈니스 도메인과 일치해야 한다는 개념입니다. 복잡한 소프트웨어를 개발하는 접근법의 하나로서 소프트웨어 프로젝트가 핵심 도메인과 도메인 로직에 집중하고, 소프트웨어를 추상화한 도메인 모델을 기반으로 비즈니스 로직과 코드 간의 간극을 줄이는 데 초점을 맞춥니다.
위키북스에서는 2011년에 에릭 에반스(Eric Evans)의 《도메인 주도 설계》를 시작으로 도메인 주도 설계를 다룬 3권의 책을 출간했습니다.
일명 블루북(blue book)이라고 하는 에릭 에반스의 《도메인 주도 설계》는 도메인 주도 설계의 효시가 된 책입니다. 도메인 주도 설계를 처음으로 주창한 저자의 책 답게 도메인 주도 설계에 대한 실용적이고 합리적인 접근법과 설계 및 모델링 기법 등이 잘 정리된 책입니다.
다음으로 《도메인 주도 설계 철저 입문》은 에릭 에반스의 블루북에 비해 초심자도 이해하기 쉽고 실천하기도 쉬운 패턴부터 시작해 구체적인 예제와 함께 도메인 주도 설계에서 자주 볼 수 있는 패턴의 목적과 구현 방법을 다룬 책입니다.
도메인 주도 설계 입문서이며, 앞으로 《도메인 주도 설계》를 읽으려는 독자, 또는 이미 해당 도서를 읽었더라도 ‘더 이해하기 쉬운 입문서’를 필요로 하는 엔지니어를 대상으로 하는 책입니다. 《도메인 주도 설계》에 본격적으로 입문하는 것을 목적으로, 구현 패턴을 집중적으로 다룹니다.
마지막으로 《도메인 주도 설계로 시작하는 마이크로서비스 개발》은 마이크로서비스 개발에 입문하고자 하는 분들을 위해 전반적인 마이크로서비스 아키텍처의 개념과 주요 패턴들을 소개하고, 마이크로서비스 개발 방법으로 도메인 주도 설계를 마이크로서비스에 적용하는 방법을 설명합니다.
《도메인 주도 설계로 시작하는 마이크로서비스 개발》에서는 마이크로서비스의 전반적인 개념과 필요성을 설명한 후 실제 마이크로서비스 개발을 위한 아키텍처 정의, 마이크로서비스 도출, 도메인 모델 설계, 구현, 빌드 및 배포와 같은 마이크로서비스 개발 활동들을 단계별로 실습을 통해 설명합니다.
객체지향에 대한 배경지식이 많지 않다면 객체지향에 대해 먼저 학습한 후 도메인 주도 설계를 학습하는 순서로 진행하기를 권장합니다. 객체지향 설계가 도메인 주도 설계의 구현 기반으로 활용되기 때문에 객체지향에 대해 충분히 알아두실 필요가 있습니다. 이를 위해서는 먼저 《객체지향의 사실과 오해》로 객체지향의 개념과 기초 이론을 익힌 후, 《오브젝트》를 통해 객체지향 설계를 구현하는 과정을 학습합니다. 다음으로 《오브젝트 디자인 스타일 가이드》로 객체지향 다양한 상황에서 참고할 만한 설계 가이드를 마련하고 객체지향 설계 실력을 다질 수 있습니다.
‘도메인 주도 설계’의 경우 에릭 에반스의 《도메인 주도 설계》로 시작해도 좋지만 이 책으로 도메인 주도 설계를 처음 접한다면 자칫 어렵게 느껴질 수 있습니다. 따라서 《도메인 주도 설계 철저 입문》으로 이해하기 쉽고 실천하기 쉬운 패턴, 구체적인 예제를 통해 차근차근 도메인 주도 설계에 대한 이해의 폭을 넓히는 방법도 좋습니다.
도메인 주도 설계에 대한 기초 개념과 접근법을 이해하고 나서 좀 더 폭넓고 깊이 있는 내용이 궁금하다면 《도메인 주도 설계》를 읽어보시길 권장합니다. 만약 프로젝트에 마이크로서비스를 도입하기로 했거나 실무에서 마이크로서비스 개발에 도메인 주도 설계를 어떻게 접목하는지 궁금하다면 《도메인 주도 설계로 시작하는 마이크로서비스 개발》을 통해 궁금증을 해소하실 수 있습니다.