단일 책임 원칙(SRP – Single Responsibility Principle)은 한 클래스가 너무 많은 책임을 가지고 있는 경우, 코드의 기능상으로 코드의 방만함이 예상될때 클래스의 기능을 여러개로 나누어 책임을 분산하는 원칙을 말한다.
아래와 같이 클래스를 작성했다고 하자.

만능 기술자의 업무를 분류한 클래스로 만능 기술자라는 클래스 아래 여러 작업을 구현한 메소드가 어지럽게 늘어서 있다. 만능 기술자라서 Angular도 배워야 하고 Vue.js도 배워야 하는가하면 자바서블릿도 배우고 HTML과 CSS도 배워야 하고 시스템 관리도 다 해야 한다. 그러나 현실적으로 업체에서 만드는 프로젝트는 한사람이 다 몰아서 할 수가 없다. 즉 단일 책임의 원리를 위배한 설계다.
책임을 분리해서 단순화된 클래스로 만들 수는 없을까? 즉 Angular하기와 Vue.js하기는 프론트엔드 개발자에게, 자바서블릿하기와 스프링부트하기는 백엔드 개발자에게 맞기는 식으로 책임을 분산시켜 명확한 업무를 분담하는 것이다.

한눈에 보기에도 각각의 책임에 맞게 일관된 기능을 담당할 수 있게 되었다. 이는 한 클래스에 부과된 책임을 최대한 단순하게 가져가는 원칙을 지킨 것이며 이를 단일 책임의 원칙을 지켰다고 할 수 있게 된다.
이렇게 관리하게 되면 유지보수도 쉽게 되고 어디에 어느 코드가 있을지 쉽게 알 수 있게 된다. 메소드뿐아니라 필드의 경우에도 각각의 책임에 맞게 분산되어 있어서 가독성도 높아지게 된다. 코드가 추가될때도 일관된 기준에 따라 되기에 유지보수에 장점이 있다.
이를 줄여서 SRP를 준수한다고 말한다. SRP를 준수하는 이유는 단일한 책임을 클래스에 부여하기 위해서이고, SRP를 위배한 경우보다 명료함과 단순함, 유지보수의 용이성이 있게 된다.