Files
2nd/10_Wiki/Topics/Single_Responsibility_Principle.md
T
2026-05-02 23:33:34 +09:00

3.8 KiB

id, title, category, status, canonical_id, aliases, duplicate_of, source_trust_level, confidence_score, tags, raw_sources, last_reinforced, github_commit
id title category status canonical_id aliases duplicate_of source_trust_level confidence_score tags raw_sources last_reinforced github_commit
P-REINFORCE-WIKI-DEV-SRP 단일 책임 원칙과 높은 응집도 (SRP) Unified verified
SRP
단일 책임 원칙
Single Responsibility Principle
응집도
책임 분리
A 1.0
SOLID
Design_Principles
Clean_Code
Refactoring
Modularity
Datacollector_Export_2026-05-02
2026-05-02

단일 책임 원칙과 높은 응집도 (SRP)

1. 개요

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

2. 핵심 개념 및 판단 기준

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

3. 엔지니어링 가치

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

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

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

🧪 검증 상태 (Validation)

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