#Design

코드 없이 이해하는 '단일책임원칙(SRP)' 이야기

코드 없이 이해하는 '단일책임원칙(SRP)' 이야기
01

Summary

코드 한 줄 없이 정복하는 '단일책임원칙(SRP)', 심장과 맥가이버 칼에 숨겨진 설계의 비밀

어려운 객체 지향 설계 원칙을 우리 몸의 장기와 일상 사물의 직관적 비유로 명쾌하게 풀어낸 아키텍처 가이드

이 아티클은 복잡한 다이어그램과 소스 코드 대신 일상의 유쾌한 비유를 활용하여 객체 지향 5대 원칙인 SOLID 중 가장 오해하기 쉬운 '단일책임원칙(SRP)'을 파헤칩니다. '기능은 책임을 위해 존재한다'는 핵심 명제를 중심으로, 비디오 일체형 TV와 맥가이버 칼을 통해 비즈니스 컨텍스트에 따라 달라지는 현실적인 트레이드오프 설계 전략을 제시합니다. 궁극적으로 메서드, 클래스, 패키지로 이어지는 추상화 레벨에서 건강한 모듈 경계를 정의하는 훌륭한 인사이트를 선사합니다.

  • 01"기능은 책임을 위해 존재한다"는 공식 제안을 통해 많은 개발자들이 어려워하는 기능과 책임의 구별법 제공
  • 02폐와 심장의 긴밀한 결합 예시를 통해 한 모듈의 수정이 엉뚱한 곳을 고장 나게 만드는 부작용(Side Effect)의 원인 직관적 설명
  • 03비디오 일체형 TV를 통해 변경 주기와 액터가 다른 코드들을 한 모듈에 방치했을 때 치러야 할 비용 조명
  • 04맥가이버 칼 비유를 통해 MVP 단계와 성숙한 제품 서비스 단계에서의 설계 우선순위 및 전략적 기술부채 관리법 제시
  • 05세포(메서드), 기관(클래스), 신체계(패키지)의 프랙탈 구조를 통한 추상화 수준(Level of Abstraction) 유지의 중요성 강조

RECOMMENDATION

설계 이론이 어렵게만 느껴졌던 주니어 개발자뿐만 아니라, 컴포넌트 분리 경계와 리팩토링 시점을 고민하는 시니어 아키텍트 모두에게 설계의 철학적 깊이를 더해주는 훌륭한 필독서로 추천합니다.

The Problem

개발자들이 소프트웨어 설계 시 단일책임원칙(SRP)을 단순한 코딩 규칙으로만 파악하여 개념적인 혼동을 겪거나, 책임과 기능을 혼동하여 강한 결합도와 예기치 못한 부작용을 초래하는 비효율적인 설계를 반복하는 문제가 발생합니다.

The Solution

일상 사물(가위, 연필, 비디오 일체형 TV, 맥가이버 칼)과 인체 장기(심장, 폐, 코, 혀)의 비유를 사용하여 '책임'과 '기능'의 차이를 규명하고, 세포부터 시스템 수준까지 연결되는 추상화 레벨 기반의 아키텍처 관점을 제시합니다.

The Result

코드를 사용하지 않는 직관적인 접근을 통해 SRP의 본질적 의미를 파악하게 되며, 시스템의 컨텍스트에 따른 설계 트레이드오프 분석 및 리팩토링 경계 설정 능력을 향상시킬 수 있습니다.

Trade-off

비유 중심의 개념적 분석에 초점을 맞추고 있어 실제 코드 수준에서의 구현 패턴이나 언어별 리팩토링 실전 기법은 구체적으로 다루지 않는다는 한계가 있습니다.

03

Key Concepts

Concept · 01

단일책임원칙 (Single Responsibility Principle, SRP)

클래스나 모듈은 변경의 이유가 오직 하나여야 하며, 특정한 하나의 액터(Actor) 또는 이해관계자에 대해서만 책임져야 한다는 설계 원칙입니다.

  • 혈액 순환이라는 단 하나의 목적을 지탱하는 심장의 다양한 기능을 사례로 들어 단일 책임을 설명함
  • 자주 변경되는 비즈니스 로직과 잘 바뀌지 않는 프레임워크를 한곳에 결합했을 때의 위험성을 일체형 TV에 비유함
Concept · 02

기능과 책임 (Function vs Responsibility)

기능은 책임을 완수하기 위해 존재하는 구체적인 하위 수행 수단(Method)이며, 책임은 그 기능들이 궁극적으로 달성하고자 하는 상위 목적입니다.

  • 수축, 이완, 호르몬 조절과 같은 개별 '기능'들이 혈액 순환이라는 단 하나의 '책임'을 지향해야 함을 증명함
  • 소화 효소 분비처럼 순환 책임에 어긋나는 기능이 심장에 섞일 수 없는 구조적 모순을 판별식으로 제시함
Concept · 03

설계 트레이드오프 (Design Trade-off)

시스템의 한정된 자원이나 비즈니스 목표(예: 빠른 출시, 공간 제약)에 맞춰 아키텍처적 유연성과 결합도 간의 가중치를 저울질하여 내리는 타협적 설계 결정입니다.

  • 숨을 쉬는 통로이면서 냄새를 맡는 기능을 동시에 수행해 리스크를 가지는 신체의 효율적 통합 구조를 언급함
  • 맥가이버 칼처럼 등산객이라는 컨텍스트의 편의성을 위해 유지보수성을 희생하는 선택이 비즈니스 요구에 따른 합리적 선택이 될 수 있음을 강조함