단일 책임 원칙(Single Responsibility Principle, SRP)
- SOLID 원칙 중 하나로, 클래스는 오직 하나의 책임만 가져야 한다
단일 책임 원칙은 객체 지향 프로그래밍에서 SOLID 원칙 중 하나입니다.
이 원칙에 따르면, "클래스는 오직 하나의 책임만 가져야 한다"는 것입니다.
가장 쉽게 볼 수 있는 예시로 백엔드 개발을 할 때 Service와 Repository를 구분해서 개발을 하는 것입니다
Service는 비즈니스 로직, Repository는 데이터베이스 접근에 대한 책임을 가집니다.
그 결과, 계층 간 데이터 변경과 유지 보수의 용이함을 가지죠
단일 책임 원칙의 이해
만약 클래스나 메소드가 너무 많은 일을 담당하고 있다면, 그 기능을 수정하거나 변경하는 데 필요한 노력이 늘어나며, 버그 발생 확률도 증가합니다.
이 원칙은 하나의 클래스나 메소드가 수행하는 일을 한 가지로 제한함으로써 코드의 유지 관리를 용이하게 합니다.
예제 1. 사용자 정보 처리
사용자 정보를 데이터베이스에서 가져오는 메소드와 사용자 정보를 화면에 보여주는 메소드가 하나의 클래스에 포함되어 있다면, 이는 단일 책임 원칙을 위반한 것입니다.
데이터베이스에서 정보를 가져오는 기능과 화면에 정보를 보여주는 기능은 서로 다른 책임을 가지므로 이를 분리하는 것이 유지보수 관점에서 바람직합니다.
SRP를 준수하면 한 기능에 대한 변경이 다른 기능에 영향을 미치는 일이 줄어들게 됩니다.
이로써 코드의 가독성과 유지 보수성이 향상되며, 테스트하기도 더 쉬워집니다.
예제 2. Employee의 책임 분리
단일 책임 원칙을 지키지 않은 예제:
public class Employee {
private String employeeId;
private String name;
private int age;
public void getEmployeeDetails() {
// 데이터베이스에서 직원 정보를 가져오는 코드
}
public void printEmployeeDetails() {
// 직원 정보를 화면에 출력하는 코드
}
}
위의 Employee
클래스는 직원 정보를 가져오는 기능과 직원 정보를 출력하는 기능을 모두 수행하고 있습니다.
이 클래스는 단일 책임 원칙을 위반하고 있습니다.
단일 책임 원칙을 준수한 예제:
public class Employee {
private String employeeId;
private String name;
private int age;
public void getEmployeeDetails() {
// 데이터베이스에서 직원 정보를 가져오는 코드
}
}
public class EmployeePrinter {
public void printEmployeeDetails(Employee employee) {
// 직원 정보를 화면에 출력하는 코드
}
}
위 예제에서는 Employee
클래스와 EmployeePrinter
클래스로 기능을 분리했습니다.
Employee
클래스는 직원 정보를 가져오는 기능을 수행하고, EmployeePrinter
클래스는 직원 정보를 출력하는 기능을 수행합니다.
이렇게 클래스를 분리함으로써 각 클래스는 하나의 책임만을 가지게 되고, 단일 책임 원칙을 준수하게 됩니다.
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
'Computer Science > 디자인패턴' 카테고리의 다른 글
Service (0) | 2023.07.12 |
---|---|
Repository (0) | 2023.07.12 |
생성자 VS 빌더 패턴 (0) | 2023.07.05 |
Builder 패턴 (0) | 2023.07.05 |
데코레이터 패턴(Decorator Pattern) (0) | 2023.05.03 |