title: **"**SRP : The Single-Responsibility Principle**"**
description: "SRP : The Single-Responsibility Principle"
cleanUrl: /sw-engineer/srp
floatFirstTOC: right
Definition
- 클래스는 단일 책임 만이 따르도록. 좀더 나은 표현으로, 단 한가지의 변경 이유만을 가지도록
- Cohesion(응집도) 증대 원칙
SRP violated sample
**public class Modem** {
**// connection responsibility**
public void Dial(string pno) { /*code*/ } public void Hangup() { /*code*/ }
**// data channel responsibility**
public void Send(char c) { /*code*/ } public char Recv() { /*code*/ } }
특징
- Connection과 data channel이란 두 개의 책임이 단일 entity로 묶임
문제점
- Connection 부분 code 변경이 data channel 담당 client code의 재컴파일, 재배포를 요구함
SRP complied sample
public class Connection {
public void Dial(string pno) { /*code*/ } public void Hangup() { /*code*/ }
}
public class Channel {
public void Send(char c) { /*code*/ } public char Recv() { /*code*/ } }
특징
- 책임 별 class 분리를 통해 특정 client code 와의 action 변경이 타 client code에 영향을 미치지 않음
Conclusion
- 가장 간단한 원칙이나 가장 지키기 어려운 원칙 중 하나.
- Application의 경직성, 취약성을 제거.
References