단일 책임 원칙 (Single Responsibility Principle, SRP)은 클래스나 모듈은 단 하나의 책임만 가져야 하며, 그 책임에 대해서만 변경되어야 한다는 것을 말합니다. 이 원칙을 적용하지 않은 코드와 적용한 코드를 Java로 작성하여 비교해 보겠습니다.
아래 코드는 User 클래스가 사용자 정보 관리, 데이터 저장, 이메일 전송의 여러 책임을 모두 가지고 있습니다.
public class User {
private String username;
private String email;
public User(String username, String email) {
this.username = username;
this.email = email;
}
public String getUsername() {
return username;
}
public String getEmail() {
return email;
}
// 데이터 저장 로직
public void save() {
System.out.println("Saving user " + username + " to the database.");
// 데이터베이스 저장 로직
}
// 이메일 전송 로직
public void sendEmail(String message) {
System.out.println("Sending email to " + email + ": " + message);
// 이메일 전송 로직
}
public static void main(String[] args) {
User user = new User("john_doe", "john@example.com");
user.save();
user.sendEmail("Welcome to our service!");
}
}
아래 코드는 각 클래스가 하나의 책임만 가지도록 분리되었습니다.
public class User {
private String username;
private String email;
public User(String username, String email) {
this.username = username;
this.email = email;
}
public String getUsername() {
return username;
}
public String getEmail() {
return email;
}
}
public class UserRepository {
public void save(User user) {
System.out.println("Saving user " + user.getUsername() + " to the database.");
// 데이터베이스 저장 로직
}
}
public class EmailService {
public void sendEmail(User user, String message) {
System.out.println("Sending email to " + user.getEmail() + ": " + message);
// 이메일 전송 로직
}
}
public class Main {
public static void main(String[] args) {
User user = new User("john_doe", "john@example.com");
UserRepository userRepository = new UserRepository();
EmailService emailService = new EmailService();
userRepository.save(user);
emailService.sendEmail(user, "Welcome to our service!");
}
}
단일 책임 원칙을 적용하면 코드의 유지보수성, 재사용성, 가독성이 크게 향상됩니다. 각 클래스가 하나의 책임만 가지도록 설계하면 변경에 유연하고, 코드의 복잡도를 낮출 수 있습니다. 따라서 소프트웨어 개발에서 SRP를 준수하는 것이 중요합니다.