SRP - 단일 책임 원칙 (Single responsibility principle)
하나의 클래스는 하나의 책임을 가져야한다.
클래스내부의 코드들은 서로 강하게 결합이 되게된다 . 두개의 서로 다른 책임을 가지게 된다면 , 서로 관련성이 없는 두 코드들이 강하게 결합될 수 있는 것이다.
또 , 여러개의 책임을 가지고 있다면 , 변경에 따른 테스트의 갯수 또한 많아지게 될 것이다.
-
여러개의 책임을 가진 구조체
struct IT기업 {
func 소프트웨어만들기() -> 검증된소프트웨어? {
let 설계도 = 설계하기()
let 프로토타입 = 개발하기(설계도: 설계도)
let 시제품 = 테스트하기(대상: 프로토타입) ? 프로토타입 : nil
return 시제품
}
func 설계하기() -> 시스템다이어그램 {
return 시스템다이어그램()
}
func 개발하기(설계도:시스템다이어그램) -> 소프트웨어 {
return 소프트웨어()
}
func 테스트하기( 대상: 소프트웨어) -> Bool {
return 소프트웨어.성능 > 50 ? true : false
}
}
IT기업이 주체가되어 설계하기
,개발하기
, 테스트하기
과정을 거쳐서 소프트웨어를 만들어 내고 있습니다
IT기업은 너무 많은 책임을 가지고 있습니다.
수정에 따른 잦은파 일의 변경도 예상됩니다.
-
단일 책임을 가지는 구조체
struct 좋은IT기업 {
let 설계자: 설계자
let 개발자: 개발자
let 테스터: 테스터
func 소프트웨어만들기() -> 검증된소프트웨어? {
let 설계도 = self.설계자.설계하기()
let 프로토타입 = self.개발하기(설계도: 설계도)
let 시제품 = self.테스터.테스트하기(대상: 프로토타입) ? 프로토타입 : nil
return 시제품
}
}
좋은IT기업은 하나의 목적을 위해서 동작을 수행합니다.
그 과정에서 많은 행동들이 필요하지만 , 그 메소드들의 책임은 자신이 가지고 있지 않습니다 .
대신 그 일을 잘 처리해 줄 수 있는 객체들만 알고 있습니다.
우리는 하나하나의 객체에 하나하나의 알맞게 책임을 부여하고 ,
책임을 수행하는 객체들간의 협력으로 하나의 다른 더 큰 책임을 수행하고 있습니다.
또 그 객체에게 메시지를 보내서 행동수행을 요청해서 , 객체들의 협력을 통해 하나의역할을 제대로 수행하게됩니다.