하나의 클래스는 하나의 책임만을 가져야 하며 클래스를 변경하는 이유는 단 하나의 이유여야 한다.
문서를 편집하고 출력하는 A라는 클래스가 있다고 치자.
서비스를 잘 운영하다가 이제 새로운 기능을 추가하려고 한다.
두 가지 기능 모두 A클래스를 변경 및 수정하여 구현하게 된다.
위와 같이 하나의 클래스에 여러 개의 책임이 있으면 몇 가지 문제점을 갖게 된다.
1. 의도치 않은 오류 발생
편집 관련된 코드를 수정하다가 실수로 출력 관련된 코드를 건드릴 수 있다.
2. 유지 보수의 어려움
기능이 점점 추가되고 코드의 양이 많아짐에 따라 각 기능이 편집에 대한 것인지, 출력에 대한 것인지 식별하기 힘들어진다.
사실, 위의 예시는 간단하게 예를 든 것이고 실제로는 문맥과 상황에 따라 책임의 기준이 모호하기 때문에 책임을 구분하기 어렵다.
그래서 변경을 책임의 기준으로 삼는다.
따라서, 클래스를 변경할 때 그에 따른 파급효과가 적으면 SRP를 잘 지켰다고 본다.
위키백과 - 단일 책임 원칙
인프런 - 스프링 핵심 원리 기본편 (김영한)
Youtube - 널널한 개발자 TV