- SRP(Single Responsibility Principle) : 단일 책임 원칙
단일 책임 원칙은 모든 클래스는 하나의 책임만 가져야 한다는 원칙이다. 클래스가 하나의 책임만 가지게 되면, 코드의 유지보수가 용이해지고 재사용성이 높아지며, 버그 발생 가능성이 줄어들어 코드의 신뢰성이 높아진다.
아래는 단일 책임 원칙이 위배된 코드이다.
public class Employee {
private String name;
private int id;
private String address;
private double salary;
/* Constructor, getters, and setters */
public boolean saveEmployee() {
// save employee data to database
return true;
}
public void printEmployeeReport() {
// print employee report
}
public void calculateSalary() {
// calculate employee salary
}
public void sendSalaryNotification() {
// send salary notification to employee
}
}
위의 코드에서 Employee 클래스는 직원의 정보를 저장하고, 보고서를 출력하고, 급여를 계산하고, 급여 알림을 보내는 등 다양한 기능을 수행한다.
이렇게 하나의 클래스에 많은 책임을 부여하면 클래스가 커지고 복잡해지며, 변경사항이 생길 때마다 클래스를 변경해야 할 가능성이 높아진다. 이는 코드의 가독성과 유지보수성을 저해한다.
아래는 단일 책임 원칙이 적용된 코드이다.
public class Employee {
private String name;
private int id;
private String address;
private double salary;
/* Constructor, getters, and setters */
}
public class EmployeeDatabaseManager {
public boolean saveEmployee(Employee employee) {
// save employee data to database
return true;
}
}
public class EmployeeReportGenerator {
public void printEmployeeReport(Employee employee) {
// print employee report
}
}
public class EmployeeSalaryCalculator {
public void calculateSalary(Employee employee) {
// calculate employee salary
}
}
public class EmployeeSalaryNotifier {
public void sendSalaryNotification(Employee employee) {
// send salary notification to employee
}
}
위의 코드에서 Employee 클래스는 하나의 책임을 가지게 되고, 나머지 기능들은 별도의 클래스로 분리된다.
EmployeeDatabaseManager 클래스는 데이터베이스와 상호작용하는 책임을,
EmployeeReportGenerator 클래스는 보고서를 출력하는 책임을,
EmployeeSalaryCalculator 클래스는 급여를 계산하는 책임을,
EmployeeSalaryNotifier 클래스는 급여 알림을 보내는 책임을 가진다.
이렇게 클래스의 책임을 분리함으로써, 코드의 가독성과 유지보수성이 향상된다.