Files
2nd/10_Wiki/Topics/Architecture/Single-Responsibility-Principle.md
T

8.3 KiB

category, tags, title, last_updated
category tags title last_updated
Unified
auto-consolidated
technical-documentation
Single-Responsibility-Principle|Single-Responsibility-Principle
2026-05-02

Single-Responsibility-Principle

📌 Brief Summary

지식 요약 정보 추출 중...


단일 책임 원칙(SRP)은 클래스, 모듈 또는 함수가 단 하나의 작업이나 책임만을 가져야 하며, 그 코드가 변경되어야 할 이유도 단 하나여야 한다는 객체 지향 설계의 핵심 원칙입니다 [1-3]. 이 원칙은 복잡한 시스템을 모듈화하고 유지보수성을 높이기 위한 '관심사의 분리(SoC)' 개념을 개별 클래스나 함수 수준에서 극대화한 것으로 볼 수 있습니다 [3-5]. 이를 적용하면 코드의 목적이 명확해지고, 하나의 변경 사항이 시스템의 다른 부분에 미치는 영향을 최소화하여 버그 발생 가능성을 줄일 수 있습니다 [6].

📖 Core Content

본문 구조화 작업 중...


  • 정의 및 핵심 개념 단일 책임 원칙은 특정 소프트웨어 개체(클래스, 함수 등)가 변경되어야 할 이유가 단 하나뿐이어야 함을 규정합니다 [1, 3]. 이는 각 모듈이나 클래스가 하나의 역할에만 집중해야 함을 의미합니다 [5]. 예를 들어, 장바구니의 총가격을 계산하는 함수는 결과를 화면에 출력하기 위해 포맷을 맞추는 작업을 동시에 처리해서는 안 되며 [7], 사용자 데이터를 저장하고 조회하는 클래스는 사용자 입력을 검증하는 역할을 함께 맡아서는 안 됩니다 [1].

  • 관심사의 분리(SoC)와의 관계 단일 책임 원칙은 소프트웨어 공학의 '관심사의 분리(SoC)' 철학에서 파생된 객체 지향 설계의 SOLID 원칙 중 하나입니다 [8-10]. SoC가 전반적인 시스템 아키텍처나 대규모 모듈 단위에서 논리적 관심사를 분리하여 복잡성을 관리하는 데 중점을 둔다면, SRP는 이를 개별 클래스나 모듈 수준의 "책임"으로 세분화하여 적용합니다 [3, 11]. 본질적으로 SRP는 관심사의 분리 원칙을 가장 극단적인 수준까지 가져간 형태라고 할 수 있습니다 [4].

  • 설계 상의 이점

    • 가독성 및 유지보수성 향상: 클래스와 함수가 오직 하나의 목적만 가지게 되어 다른 프로그래밍 구조에 비해 코드를 이해하고 평가하며 구축하기가 훨씬 쉽습니다 [6, 11].
    • 버그 노출 감소: 시스템의 기능이 변경될 때 영향을 받는 클래스의 수가 줄어들기 때문에, 의도치 않은 부작용이나 버그가 다른 영역으로 전파될 위험이 감소합니다 [6].
    • 응집도 강화: 모듈 내의 코드가 단일 책임을 달성하기 위해 뭉치게 되므로 시스템의 전반적인 응집도(Cohesion)를 높이는 데 기여합니다 [11].
  • 실무적 적용 단일 책임 원칙은 객체 지향 설계에서 가장 먼저, 그리고 쉽게 적용할 수 있는 원칙입니다 [12]. 개발자는 새로운 클래스나 함수를 작성하기 전에 "이 요소의 단일 책임은 무엇인가?"를 스스로에게 질문해야 합니다 [2, 12]. 프론트엔드 개발에서도 이 원칙이 적용되는데, 예를 들어 컴포넌트는 화면을 그리는 역할만 담당하게 하고 비즈니스 로직이나 상태 관리는 별도의 모듈에서 처리하도록 분리하는 방식이 이에 해당합니다 [5].

⚖️ Trade-offs & Caveats

  • 과거 데이터와의 충돌: 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
  • 정책 변화: Design & Experience 분야의 자동 자산화 수행.

  • 과거 데이터와의 충돌: 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
  • 정책 변화: Programming & Language 분야의 자동 자산화 수행.

🔗 Knowledge Connections

  • Raw Source: 00_Raw/2026-04-20/Single-Responsibility-Principle.md




Last updated: 2026-04-18


1. 개요

단일 책임 원칙(SRP, Single Responsibility Principle)은 "하나의 클래스는 단 하나의 책임만을 가져야 하며, 클래스가 변경되어야 하는 이유는 오직 하나뿐이어야 한다"는 설계 원칙이다. 이는 객체 지향 설계의 핵심인 응집도(Cohesion)를 극대화하고 결합도(Coupling)를 낮추어, 소프트웨어를 더 이해하기 쉽고 변경에 강하며 테스트 가능한 구조로 만드는 기초 토대가 된다.

2. 핵심 개념 및 판단 기준

  • 변경의 이유 (Reason to Change): 책임이란 곧 '변경의 근거'를 의미한다. 만약 기획 부서의 요구사항 변경과 데이터베이스 관리자의 구조 변경이 동시에 한 클래스의 수정을 유발한다면, 그 클래스는 두 가지 책임을 가진 것이다.
  • 응집도 (Cohesion): 클래스 내부의 메서드와 데이터들이 얼마나 밀접하게 관련되어 있는지의 척도. SRP를 준수할수록 응집도는 자연스럽게 높아진다.
  • 관심사의 분리: 비즈니스 로직, 데이터 영속성, UI 렌더링, 입력 검증 등 서로 다른 도메인 관심사를 명확히 구분하여 개별 클래스나 모듈로 격리.

3. 엔지니어링 가치

  • 유지보수 안정성: 특정 기능을 수정할 때 해당 책임만을 전담하는 클래스만 고치면 되므로, 예상치 못한 사이드 이펙트(Side Effect)가 시스템 전반으로 퍼지는 위험 차단.
  • 코드 가독성 및 명확성: 클래스의 이름과 구현 코드가 하나의 목적만을 지향하므로, 코드를 처음 읽는 개발자가 시스템의 의도를 신속하고 정확하게 파악 가능.
  • 재사용성 및 테스트 용이성: 작고 명확한 책임을 가진 클래스는 다른 컨텍스트에서 재사용하기 쉽고, 모의 객체(Mock)를 활용한 단위 테스트 작성이 매우 간편함.

4. 트레이드오프 및 주의사항

  • 클래스 폭발 (Class Explosion): 원칙을 너무 잘게 적용하면 시스템에 수많은 클래스가 생성되어 전체적인 오케스트레이션(흐름)을 파악하기 위한 인지적 비용이 증가할 수 있음. 적절한 수준의 추상화와 그룹화 필요.
  • 파편화된 로직: 하나의 비즈니스 프로세스가 너무 많은 클래스에 흩어져 있으면 오히려 가독성을 해칠 수 있다. '변경의 이유'가 같은 로직은 하나로 묶는 균형 감각이 요구됨.
  • 점진적 리팩토링: 거대한 레거시 클래스를 한 번에 분해하기보다는, 새로운 요구사항이 발생하거나 버그를 수정할 때마다 책임의 경계를 확인하며 점진적으로 분리할 것.

🧪 검증 상태 (Validation)

  • 정보 상태: 검증 완료 (Verified)
  • 출처 신뢰도: A
  • 검토 이유: 소프트웨어 모듈의 근본적인 단위인 클래스의 책임을 명확히 정의함으로써, 시스템의 유지보수성과 확장성을 보장하는 가장 강력한 설계 도구 정립.