■ 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 장점
- 유지보수 용이 : 클래스가 하나의 책임만 가지므로 변경이 필요할 때 영향을 미치는 범위가 좁아진다
- 테스트 용이 : 각 클래스가 하나의 책임만 가져 단위 테스트가 용이하다
- 재사용성 증가 : 특정의 기능만 담당하는 클래스를 독립적으로 사용할 수 있다.
'JAVA' 카테고리의 다른 글
[JAVA] ISP (인터페이스 분리 원칙) (0) | 2025.04.08 |
---|---|
[JAVA] LSP (리스코프 치환 원칙) (0) | 2025.04.07 |
[JAVA] OCP (개방 폐쇄 원칙) (0) | 2025.04.06 |
[JAVA] 다형성(2) - abstract, 인터페이스 (0) | 2025.03.30 |
[JAVA] 다형성(1) - 다형성 참조, 캐스팅, instanceof 연산자 (0) | 2025.03.23 |