[OOP] 객체 지향 설계 5원칙(SOLID) : SRP(Single Responsibility Principle)-단일 책임 원칙
SRP(Single Responsibility Principle)
각 클래스는 하나의 책임을 가져야 한다는 원칙
클래스의 역할과 책임을 명확히 분리 ㅡ> 책임 의존성 과중 지양 ㅡ> 변경이 필수적인 경우에만 해당하는 클래스만 수정
코드 예제
SRP가 적용되지 않은 코드
#include <iostream>
#include <string>
using namespace std;
class Student {
public:
void setName(const string& name) {
this->name = name;
}
void displayDetails() {
cout << "Student Name: " << name << std::endl;
}
void calculateGrade(int score) {
if (score >= 90) {
cout << "Grade: A" << std::endl;
} else if (score >= 80) {
cout << "Grade: B" << std::endl;
} else {
cout << "Grade: C" << std::endl;
}
}
private:
string name;
};
해당 코드는 SRP가 적용되지 않은 코드
ㅡ> Student 클래스의 책임 3가지 (SRP 위반)
- Student 클래스는 학생들의 정보를 저장
- 학생들의 정보를 출력하는 기능
- 성적 계산
ㅡ> 하나의 객체에 너무 많은 책임이 몰림 ㅡ> 객체의 의존성 상승 ㅡ> 코드 수정으로 인한 영향, 범위가 넓어짐
ㅡ> 코드 유지보수 효율성 저하
SRP에 따르려면 Student 클래스에서는 학생 정보만을 담고 있고, 나머지 기능들은 다른 클래스들에 구현해야 합니다
SRP가 적용된 코드
#include <iostream>
#include <string>
using namespace std;
// 학생 정보 관리 클래스
class Student {
public:
void setName(const string& name) {
this->name = name;
}
string getName() const {
return name;
}
private:
string name;
};
// 성적 계산 클래스
class GradeCalculator {
public:
void calculateGrade(int score) {
if (score >= 90) {
cout << "Grade: A" << std::endl;
} else if (score >= 80) {
cout << "Grade: B" << std::endl;
} else {
cout << "Grade: C" << std::endl;
}
}
};
// 출력 클래스
class StudentPrinter {
public:
void displayDetails(const Student& student) {
cout << "Student Name: " << student.getName() << std::endl;
}
};
위 코드는 SRP 원칙을 준수하여 Student는 학생 정보만을 담고 해당 정보 관련 기능만을 수행합니다. 더불어 성적 계산 및 학생 정보 출력 기능을 따로 클래스로 구현하여 단일 책임 원칙을 준수하였습니다.
ㅡ> 위의 코드와 같이 클래스가 하나의 책임을 갖도록 설계하면 의존성이 낮아져 코드 수정 사항이 있을 때도 해당하는 클래스만 수정하면 되어 코드 유지보수의 효율성이 높아집니다.
정리
필자도 객체지향 언어를 사용하여 개발을 진행할 때 SRP를 의식하지 않고 하나의 클래스에 많은 기능을 집약적으로 구현하는 경우가 많았다. 결국은 코드의 수정 사항이 생길 때마다 해당 클래스에서 연관되어 있는 함수들을 다 수정하느라 나중에는 수정해야 될 부분을 빠뜨려 컴파일 중 에러를 일으키게 되었다.
객체지향 언어를 사용하면서 해당 언어의 이점을 활용하지 못한다면 굳이 객체지향 언어를 사용하는 의미가 퇴색되는 것이니 이점을 살리기 위해 SRP를 준수하여 코드 유지보수의 효율성을 높일 수 있도록 해보자.
* 하나의 객체 = 하나의 책임
참고자료
https://blog.itcode.dev/posts/2021/08/13/single-responsibility-principle
[OOP] 객체지향 5원칙(SOLID) - 단일 책임 원칙 SRP(Single Responsibility Principle) - 𝝅번째 알파카의 개발
올바른 객체지향 설계를 위해 수립한 원칙이 있으며, 이 다섯 가지 원칙을 통틀어 객체지향 5원칙(SOLID)이라 명명한다. 필수로 적용하지는 않지만, 적어도 이 규칙을 준수하면 준수할 수록 올바
blog.itcode.dev