[OOP] SOLID 원칙 - SRP (단일책임원칙)

jxxn_a·2023년 11월 22일
0

TIL

목록 보기
24/28

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 같은 부분을 하나씩 전부 변경해주어야하고, 놓친 부분이 생긴다면 또 다시 오류와 마주하게 된다.

✨ 클래스를 정의하기 위해서

  • 클래스를 정의하기 위해 단일 책임을 갖도록 설계하는 방법은 변경되지 않는 범위가 무엇인지 구분하고, 클래스의 이름만으로도 어떤 역할을 하는지 알 수 있도록 작성하는 것이 유지 및 보수를 하는데 중요하다.

참고한 블로그

0개의 댓글