밤에 쓴 코드

OOP ) SRP - 단일 책임 원칙 (Single responsibility principle) 본문

OOP

OOP ) SRP - 단일 책임 원칙 (Single responsibility principle)

붱이🦉 2019. 5. 18. 21:25

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기업은 하나의 목적을 위해서 동작을 수행합니다.

그 과정에서 많은 행동들이 필요하지만 , 그 메소드들의 책임은 자신이 가지고 있지 않습니다 .

대신 그 일을 잘 처리해 줄 수 있는 객체들만 알고 있습니다.

우리는 하나하나의 객체에 하나하나의 알맞게 책임을 부여하고 ,

책임을 수행하는 객체들간의 협력으로 하나의 다른 더 큰 책임을 수행하고 있습니다.

또 그 객체에게 메시지를 보내서 행동수행을 요청해서 , 객체들의 협력을 통해 하나의역할을 제대로 수행하게됩니다.

Comments