단일 책임 원칙(SRP) 적용하여 코드 개선하기
📌 단일 책임 원칙(SRP)이란?
단일 책임 원칙(Single Responsibility Principle, SRP)은 SOLID 원칙 중 하나로, **클래스나 모듈이 하나의 책임(Responsibility)만 가져야 한다**는 개념입니다.
즉, 하나의 클래스가 하나의 역할만 수행해야 유지보수가 용이하고 코드의 응집도가 높아집니다.
📌 단일 책임 원칙을 지키지 않은 코드 예제
설명: 아래 예제는 단일 책임 원칙을 지키지 않은 코드로, 하나의 클래스에서 여러 가지 기능을 수행하고 있습니다.
public class Employee {
private String name;
private double salary;
public Employee(String name, double salary) {
this.name = name;
this.salary = salary;
}
// 급여 계산 기능 (비즈니스 로직)
public double calculateSalary() {
return salary * 12;
}
// 직원 정보를 파일로 저장하는 기능 (입출력 로직)
public void saveToFile() {
System.out.println("Saving employee data to file...");
}
}
문제점:
- ✅
Employee
클래스가 직원 정보 관리, 급여 계산, 파일 저장 기능을 동시에 수행함 - ✅ 클래스의 책임이 명확하지 않으며, 수정 시 여러 기능에 영향을 미칠 가능성이 있음
- ✅ 유지보수 및 확장성이 낮아짐
📌 단일 책임 원칙을 적용한 코드 개선
해결 방법: 각 기능을 별도의 클래스로 분리하여 SRP 원칙을 준수합니다.
1️⃣ 직원 정보 관리 클래스
public class Employee {
private String name;
private double salary;
public Employee(String name, double salary) {
this.name = name;
this.salary = salary;
}
public String getName() { return name; }
public double getSalary() { return salary; }
}
2️⃣ 급여 계산 클래스
public class SalaryCalculator {
public double calculateAnnualSalary(Employee employee) {
return employee.getSalary() * 12;
}
}
3️⃣ 파일 저장 클래스
import java.io.FileWriter;
import java.io.IOException;
public class EmployeeFileManager {
public void saveToFile(Employee employee) {
try (FileWriter writer = new FileWriter(employee.getName() + ".txt")) {
writer.write("Employee: " + employee.getName());
writer.write("\nSalary: " + employee.getSalary());
} catch (IOException e) {
System.out.println("Error saving employee data.");
}
}
}
개선된 코드의 장점:
- ✅
Employee
클래스는 직원 정보만 관리 - ✅ 급여 계산 기능은
SalaryCalculator
클래스에서 담당 - ✅ 파일 저장 기능은
EmployeeFileManager
클래스에서 처리 - ✅ 유지보수가 쉬워지고, 각 클래스가 독립적으로 변경될 수 있음
📌 단일 책임 원칙 적용 시 주의할 점
- ✅ 너무 세부적으로 클래스를 나누면 오히려 관리가 어려워질 수 있음
- ✅ 하나의 클래스가 "하나의 책임"을 가지도록 균형을 유지해야 함
- ✅ 클래스 간 결합도를 낮추고, 변경이 용이하도록 설계
🔍 결론
단일 책임 원칙(SRP)을 적용하면 **코드의 가독성이 높아지고 유지보수가 쉬워집니다.** 각 클래스가 하나의 역할만 수행하도록 설계하면 **버그 발생 확률이 줄어들고, 변경이 용이해집니다.** 🚀
📌 더 많은 정보가 궁금하다면?
'개발 생산성 & 코드 최적화 > 코드 리팩토링 & 최적화' 카테고리의 다른 글
[개발 생산성 & 코드 최적화] Java Optional 클래스 사용법과 NullPointerException 예방 (0) | 2025.03.19 |
---|---|
Java 스트림(Stream) API 완벽 가이드: 기본 개념부터 활용까지 (1) | 2025.03.15 |
[Java] Stream API 활용법 및 성능 최적화 (1) | 2025.03.12 |
[개발 팁] 코드 리팩토링 필수 원칙: 클린 코드 작성법 (0) | 2025.03.11 |