SRP (Single Responsibility Principle) - 단일책임원칙
- 클래스는 하나의 책임만을 가져야한다는 원칙
예시) 데이터를 로드하는 클래스, 데이터를 보여주는 클래스, 데이터를 관리하는 클래스의 책임이 분리되어야 기능변경 시 코드 변경을 최소화 할 수 있다.
- 객체지향 프로그래밍의 특징 중 '캡슐화'에 해당되는 것 같다.
💫 SRP 구조
💗 SRP가 잘 적용된 구조
- DataDisplayer : 데이터를 보여주는 클래스
- DataLoader : 데이터를 로드하는 클래스
- Data : 데이터를 관리하는 클래스
Class DataDisplayer {
fun display() {
...
}
}
Class DataLoader {
fun load() {
...
}
}
Class Data {
fun someProperty () {
...
}
}
💗 SRP가 위반된 구조
- display() : 데이터를 로드하고 보여주는 함수
- loadHtml() : HTML로 작성된 소스를 로드하는 함수
- parseDataToGuiData() : HTML으로부터 로드된 데이터를 시각적인 데이터로 변환해주는 함수
- updateGui() : 사용자에게 보여 줄 데이터를 GuiData 타입 객체를 사용하여 시각적으로 업데이트 하는 함수
class DataViewer {
fun display() {
...
fun loadHtml() {
...
}
fun updateGui(data:String) {
...
}
fun parseDataToGuiData(data:String) {
...
}
}
🚨 문제점
- DataViewer Class는 Data를 보여주어야하는 클래스로 보이지만 실제로는 HTML 데이터 로드, 로드된 HTML 데이터를 GuiData로 변환, GuiData를 사용하여 화면에 보이는 데이터 변경을 하기 때문에 단일책임원칙을 위반한다.
- 오류 발생 시 DataType 같은 부분을 하나씩 전부 변경해주어야하고, 놓친 부분이 생긴다면 또 다시 오류와 마주하게 된다.
✨ 클래스를 정의하기 위해서
- 클래스를 정의하기 위해 단일 책임을 갖도록 설계하는 방법은 변경되지 않는 범위가 무엇인지 구분하고, 클래스의 이름만으로도 어떤 역할을 하는지 알 수 있도록 작성하는 것이 유지 및 보수를 하는데 중요하다.
참고한 블로그