어려운 객체 지향 설계 원칙을 우리 몸의 장기와 일상 사물의 직관적 비유로 명쾌하게 풀어낸 아키텍처 가이드
이 아티클은 복잡한 다이어그램과 소스 코드 대신 일상의 유쾌한 비유를 활용하여 객체 지향 5대 원칙인 SOLID 중 가장 오해하기 쉬운 '단일책임원칙(SRP)'을 파헤칩니다. '기능은 책임을 위해 존재한다'는 핵심 명제를 중심으로, 비디오 일체형 TV와 맥가이버 칼을 통해 비즈니스 컨텍스트에 따라 달라지는 현실적인 트레이드오프 설계 전략을 제시합니다. 궁극적으로 메서드, 클래스, 패키지로 이어지는 추상화 레벨에서 건강한 모듈 경계를 정의하는 훌륭한 인사이트를 선사합니다.
설계 이론이 어렵게만 느껴졌던 주니어 개발자뿐만 아니라, 컴포넌트 분리 경계와 리팩토링 시점을 고민하는 시니어 아키텍트 모두에게 설계의 철학적 깊이를 더해주는 훌륭한 필독서로 추천합니다.
개발자들이 소프트웨어 설계 시 단일책임원칙(SRP)을 단순한 코딩 규칙으로만 파악하여 개념적인 혼동을 겪거나, 책임과 기능을 혼동하여 강한 결합도와 예기치 못한 부작용을 초래하는 비효율적인 설계를 반복하는 문제가 발생합니다.
일상 사물(가위, 연필, 비디오 일체형 TV, 맥가이버 칼)과 인체 장기(심장, 폐, 코, 혀)의 비유를 사용하여 '책임'과 '기능'의 차이를 규명하고, 세포부터 시스템 수준까지 연결되는 추상화 레벨 기반의 아키텍처 관점을 제시합니다.
코드를 사용하지 않는 직관적인 접근을 통해 SRP의 본질적 의미를 파악하게 되며, 시스템의 컨텍스트에 따른 설계 트레이드오프 분석 및 리팩토링 경계 설정 능력을 향상시킬 수 있습니다.
Trade-off
비유 중심의 개념적 분석에 초점을 맞추고 있어 실제 코드 수준에서의 구현 패턴이나 언어별 리팩토링 실전 기법은 구체적으로 다루지 않는다는 한계가 있습니다.
클래스나 모듈은 변경의 이유가 오직 하나여야 하며, 특정한 하나의 액터(Actor) 또는 이해관계자에 대해서만 책임져야 한다는 설계 원칙입니다.
기능은 책임을 완수하기 위해 존재하는 구체적인 하위 수행 수단(Method)이며, 책임은 그 기능들이 궁극적으로 달성하고자 하는 상위 목적입니다.
시스템의 한정된 자원이나 비즈니스 목표(예: 빠른 출시, 공간 제약)에 맞춰 아키텍처적 유연성과 결합도 간의 가중치를 저울질하여 내리는 타협적 설계 결정입니다.