객체지향 시스템, 제대로 디자인하라!
6가지 원칙 & 실용적인 접근 방식을 배우자!
객체지향 디자인, 단순하게 유지하자!
개발자의 작업 대부분은 기존 시스템을 유지하고 발전시키는 것이다. 유지보수성이 높은 소프트웨어 시스템을 구축하려면 좋은 객체지향 디자인이 필요하며, 좋은 객체지향 디자인의 핵심 요소는 단순함이다. 처음에 시스템을 잘 디자인했다 하더라도 수정할 때마다 복잡성이 증가한다. 새로운 클래스, 메서드, 기능이 추가될 때마다 관리해야 할 상태와 추상화가 늘어난다. 자연스러운 복잡성 증가에 맞서 디자인을 단순하게 유지하는 건 어려운 일이지만, 복잡성 관리는 소프트웨어 시스템을 효과적으로 유지하고 발전시키는 데 필수적인 과정이다. 복잡성을 제어하고, 객체지향 디자인을 단순하게 유지할 수 있도록 도와주는 6가지 디자인 원칙에 대해 알아보자.
명확하고 실용적인 6가지 원칙을 깊이 탐구하자!
객체지향 코드베이스가 성장하고 변화하더라도 단순하게 유지할 수 있는 실용적인 설계 원칙이자, 모든 객체지향 언어에 적용할 수 있는 실용적인 기법을 모았다. 그 원칙을 다음 6가지 측면으로 나눠 하나씩 깊이 탐구할 것이다. 각 원리를 더욱 깊이 있게 이해할 수 있도록 쉬운 그림, 실제와 같은 시스템 예제, 생각해볼 수 있는 연습 문제를 준비했다.
• 코드를 작게 유지하는 방법
• 객체의 일관성을 유지하는 방법
• 의존성을 적절하게 관리하는 방법
• 추상화를 이해하고 잘 디자인하는 방법
• 인프라를 올바르게 처리하고 다루는 방법
• 잘 모듈화된 디자인을 달성하는 방법
실무적인 관점으로 백엔드 시스템 예제를 살펴보자!
각 원칙의 개념을 먼저 설명한 뒤 이 원칙을 어떻게 적용하는지 코드 예제를 통해 실무적인 관점에서 설명한다. 디자인 패턴을 설명하기 위해 이 책 전반에 걸쳐 피플그로우!라는 가상의 백엔드 시스템 예제를 사용할 것이다. 피플그로우!를 구축하는 팀은 현재 유지보수 문제에 직면해 있다. 버그가 발생하고, 간단한 변경이 시스템의 예기치 않은 영역에 영향을 미쳐 변경 사항을 완료하는 데 며칠씩 걸린다. 피플그로우!의 디자인 결정을 자세히 알아보고 이를 개선하면서 각 원칙의 맥락, 장단점, 원칙을 적용해야 할 때와 말아야 할 때도 함께 알아볼 것이다.
[베타테스터 후기]
객체지향 디자인이 왜 좋은가에 대한 이야기라기보다는 소프트웨어 개발 전반에 걸쳐 코드를 어떻게 작성하고 모듈을 어떻게 구현하는 것이 좋은가에 대해 다루고 있습니다. 중요한 내용을 간결하게 정리한 책입니다.
- 윤병조_소프트웨어 개발자_서버 개발자
서비스의 구조가 점점 복잡해지면서 어떤 점에 초점을 맞추어 모델링을 할지에 대해 다룹니다. 또한, 예시 코드로 설명하는 서비스 개발을 통해 객체지향에서 다루는 원칙의 각 이론을 쉽게 이해할 수 있습니다.
- 최인주_에스에스지닷컴_백엔드 개발자
저자의 경험에 바탕을 두고, 평소 현실에서 일반적으로 경험할 수 있는 케이스에 대해서 객체지향적으로 문제를 해결하는 방식이 이 책의 가장 큰 장점입니다. 책의 내용도 매우 쉽게 번역되었고, 객체지향적으로 좋은 코드를 어떻게 하면 개선해나갈 수 있는지 잘 설명되어 있습니다. 기존에 만들어진, 또는 잘 만들어진 코드를 지속적으로 잘 유지해나가야 하는지에 대해 충분히 고찰합니다. 코드를 분리할 때의 기준, 지속적으로 유지보수가 힘든 이유 등 좋은 디자인을 유지하기 위해서 무엇을 해야 하고, 원칙을 세워야 하는지 알게 해주는 책입니다.
- 박찬웅_롯데렌탈_개발팀
객체지향 디자인의 본질을 쉽고 깊이 있게 풀어낸 책입니다. 객체지향 개념을 처음 접하는 사람부터 실무 경험이 있는 개발자까지 모두에게 새로운 시각을 제공한다는 점에서 인상적이었습니다.
- 이기하_OPDC(Open Platform Developer Community)_클라우드 엔지니어
객체지향 디자인의 원칙을 통해 복잡성을 효과적으로 관리하고 억제하는 실용적인 첫걸음을 제시합니다. 개발자라면 반드시 읽어야 할, 명쾌하고 통찰력 있는 객체지향 입문서입니다.
- 서영원_컬리_소프트웨어 엔지니어
객체지향 디자인의 본질을 다시 생각하게 해주는 책입니다. 특히 원칙을 단순히 나열하는 데 그치지 않고, 원칙 간의 관계와 트레이드오프 상황에서의 균형점을 고민하게 만드는 부분이 개인적으로 인상적이었습니다. 객체지향 디자인에 대한 초심자부터, 어느 정도 경험을 쌓은 개발자, 시스템 아키텍처를 고민하는 리더까지 모두에게 유익한 책입니다.
- 최성욱_삼성전자 VD사업부 Security Lab_클라우드 보안 엔지니어
이미 개발 방법론에 대해 깊이 고민해본 경험이 있는 개발자라면, 이 책은 더욱 강력한 도구가 되어줄 것입니다. 이론과 실무를 넘나드는 탁월한 안내서로서, 자신만의 개발 철학을 정립하는 데 큰 도움이 될 것입니다.
- 박명철_오토플러스_20년차 자바 개발자