피드로 돌아가기
SOLID Principles in C# — I Refactored 60 Ugly Lines, One Rule at a Time
Dev.toDev.to
Backend

60라인의 Monolithic 메서드를 SOLID 원칙으로 분해하여 테스트 가능성 확보

SOLID Principles in C# — I Refactored 60 Ugly Lines, One Rule at a Time

kirandeepjassal-crypto2026년 5월 28일2intermediate

Context

단일 클래스 내 검증, 할인, 결제, DB 저장, 메일 발송 등 6가지 책임이 혼재된 구조의 OrderService 설계. 하드코딩된 외부 Provider 의존성으로 인해 실제 인프라 없이는 테스트가 불가능한 강한 결합 상태의 한계점 노출.

Technical Solution

  • SRP 적용을 통한 6개 책임의 Collaborator 분리 및 이해관계자별 도메인 책임 할당
  • Strategy Interface 도입을 통한 결제 수단별 switch 문 제거 및 OCP 준수로 확장성 확보
  • PaymentResult 타입 정의를 통한 LSP 위반 해결 및 상태 기반의 명확한 반환 값 체계 구축
  • IRefundable, IRecurringCapable 등 Capability 기반 Interface 분리를 통한 ISP 적용 및 불필요한 메서드 구현 제거
  • Dependency Inversion 적용으로 인프라 의존성을 Abstraction으로 대체하여 단위 테스트 환경 구축

1. 단일 메서드 내 책임이 3개 이상인지 확인

2. 결제/인증 등 타입별 분기 처리를 Strategy 패턴으로 대체 가능한지 검토

3. Interface가 구현체에 불필요한 메서드를 강제하는지 확인하여 세분화

4. 외부 API/DB 접근 로직을 Interface로 추상화하여 Mocking 가능 여부 검증

원문 읽기