JAVA

[JAVA] SRP (단일 책임 원칙)

준몽쓰 2025. 4. 6. 23:09

■ SRP

클래스(객체)는 단 하나의 책임만 가져야 한다는 원칙이다. 이 원칙에 따라 클래스는 하나의 이유로 변경되어야 한다.

 

■ SRP 따르지 않은 예시

class User {
    private String name;
    private String email;

    public User(String name, String email) {
        this.name = name;
        this.email = email;
    }

    public String getName() {
        return name;
    }

    public String getEmail() {
        return email;
    }
}

class UserManager {
    public void saveUser(User user) {
        // 사용자 정보를 저장하는 코드
        System.out.println("회원 " + user.getName() + " 저장");
    }

    public void sendEmail(User user) {
        // 사용자에게 이메일을 보내는 코드
        System.out.println("이메일을 보냅니다. " + user.getEmail());
    }

    public void deleteUser(User user) {
        // 사용자 정보를 삭제하는 코드
        System.out.println("회원 " + user.getName() + " 삭제");
    }
}

>> UserManager 클래스에는 saveUser, sendEmail, deletUser 등 여러 책임을 갖고 있어 SRP를 따르지 않는 예시이다. 

>> 이메일 보내는 방식이 변경되면 UserManager 클래스에 수정이 필요해서 위반하는 것이다.

 

■ SRP 따르는 예시

class User {
    private String name;
    private String email;

    public User(String name, String email) {
        this.name = name;
        this.email = email;
    }

    public String getName() {
        return name;
    }

    public String getEmail() {
        return email;
    }
}

class UserRepository {
    public void saveUser(User user) {
        // 사용자 정보를 저장하는 코드
        System.out.println("회원 " + user.getName() + " 저장");
    }

    public void deleteUser(User user) {
        // 사용자 정보를 삭제하는 코드
        System.out.println("회원 " + user.getName() + " 삭제");
    }
}

class EmailService {
    public void sendEmail(User user) {
        // 사용자에게 이메일을 보내는 코드
        System.out.println("이메일을 보냅니다 " + user.getEmail());
    }
}

>> UserManager 클래스는 존재하지 않으며 별도의 클래스(UserRepository, EmailService)로 분리되었다.

>> 각 클래스가 하나의 책임만 가지므로, 단일 책임 원칙(SRP) 따르고 있다.

 

■ SRP 장점

- 유지보수 용이 : 클래스가 하나의 책임만 가지므로 변경이 필요할 때 영향을 미치는 범위가 좁아진다

- 테스트 용이 : 각 클래스가 하나의 책임만 가져 단위 테스트가 용이하다

- 재사용성 증가 : 특정의 기능만 담당하는 클래스를 독립적으로 사용할 수 있다.