본문 바로가기

개발 생산성 & 코드 최적화/코드 리팩토링 & 최적화

단일 책임 원칙(SRP) 적용하여 코드 개선하기

단일 책임 원칙(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)을 적용하면 **코드의 가독성이 높아지고 유지보수가 쉬워집니다.** 각 클래스가 하나의 역할만 수행하도록 설계하면 **버그 발생 확률이 줄어들고, 변경이 용이해집니다.** 🚀


📌 더 많은 정보가 궁금하다면?

📌 https://jins-pp.tistory.com/