Single responsibility principle, 단일 책임 원칙

Ss·2024년 4월 12일

SOLID 원칙의 앞글자만 읊을 수 있던 수준에서 좀 더 발전하고 실제로 활용을 하기위해 공부해보았다.

Single responsibility principle, 단일 책임 원칙

내가 느끼기에 내 수준에 가장 잘 이해하기 쉬운 원칙이다.
하나의 클래스는 하나의 역할만을 가져야 한다 라는 의미이다.

class Todo{
  Todo(this.title, this.subtitle, this.date);
  
  String title;
  String subtitle;
  DateTime date;
}

Todo 어플을 만들기 위해 Todo클래스를 만들었는데 추가적으로 로컬 디비에 저장과 불러오기가 되었으면 좋겠다고 요청이 들어왔다.

class Todo{
  Todo(this.title, this.subtitle, this.date);
  
  String title;
  String subtitle;
  DateTime date;
  
  void save(){
    ...
  }
  
  void load(){
    ...
  }
  
}

같은 todo를 이용하기에 Todo클래스에 작성을 했더니 이번엔 서버에 전송을 해야한다고 한다.

class Todo{
  Todo(this.title, this.subtitle, this.date);
  
  String title;
  String subtitle;
  DateTime date;
  
  //local db
  void save(){
    ...
  }
  
  
  //local db
  void load(){
    ...
  }
  
  
  //server
  void post(){
    ...  
  }
  
}

이러한 작업들이 반복이 된다고 가정하면 알 수 있는 문제점은
첫번째는 코드 자체의 분석이 어려워진다. 아무리 주석을 적는다 하더라도 save는 어디서 어떻게 쓰이고 post는 어디서 어떻게 쓰이는지 클래스와 파일로 나뉘어 있는것보단 분석이 어렵다.

두번째는 Todo 클래스의 수정이 있을시 영향이 끼치는 부분을 예측하기가 힘들다.
DateTime date가 만약 String 혹은 int로 바뀐다면 다른 함수의 어느 부분이 수정이 필요한지 예측이 어렵다.
정도가 있을것 같다. 검색을 해보면 이 외에도 몇가지가 더 있지만 이정도 만으로도 충분히 어떠한 문제점인지 알것 같다.

간단히 수정을 한다면

class Todo{
  Todo(this.title, this.subtitle, this.date);
  
  String title;
  String subtitle;
  DateTime date;
    
}

class LocalDB{

  void save<T>(T todo){
    ...
  }
  
  void load<T>(T todo){
    ...
  }
  
}

class Http{
  
  void post<T>(T todo){
    ...  
  }
  
}

이정도가 될것 같다. 단순하게 각 클래스의 길이도 줄어들어 가독성도 높아졌을 뿐더러 어떤 클래스의 어떤 함수인것만 보더라도 분석이 전보다 편해졌고 추가적인 코드를 작성할때도 편해진것 같다.

0개의 댓글