본문 바로가기
더 좋은 개발자 되기/🔥 나의 개발론 🔥

책임 주도 설계(RDD) 와 단일 책임 원칙(SRP) 에서 말하는 책임은 다르다

by Wonit 2023. 1. 8.

들어가며

 

최근 우연한 기회에 객체지향의 사실과 오해오브젝트라는 책을 쓰신 조영호님과 객체지향에 대한 간단한 토론을 할 수 있는 자리가 생겨 그 자리에서 oop 의 다양한 것들에 대해서 이야기를 나누었다.

 

회사 동료이자 내가 있던 팀의 리드 개발자였던 분의 블로그 글인 조영호님과의 객체지향에 대해서 이야기하기, happy-coding-day.tistory.com 에서 나온 몇가지 주제중 한가지에 대해서 이야기해보려 한다.

 

조영호님과 객체지향에 대해서 이야기하기

트레바리에서 (전) CTO님 덕분에 오브젝트 저자 조영호님과 티타임을 가질 수 있는 기회가 생겼습니다. 티타임 자리에서 물었던 질문에 대해서 기록을 남깁니다. 아쉽게도 사진은 찍지 못했지만,

happy-coding-day.tistory.com

 

 

책임 주도 설계 (RDD) 의 책임과 단일 책임 원칙 (SRP) 의 책임은 다르다

 

책임 주도 설계단일 책임 원칙이란

 

이 둘의 간단한 뜻에 대해서 알아볼 것이다. 하지만 이번 글의 핵심은 책임 주도 설계의 여러가지 접근법과 패턴이나 SRP 의 필요성이나 효과에 대한 글이 아니기 때문에 간단하게 뜻 정도만 알아볼 것이다

 

책임 주도 설계, Responsibility Driven Design

 

책임 주도 설계 이하 RDD 는 시스템에서 책임을 누구에게 할당할 것인가? 에 대한 설계적인 관점이다.

 

이러한 설계 원칙을 통해서 거대한 시스템을 작고 응집된 여러 서브 시스템으로 만드는 것이 목적이다.

 

객체에게 어떠한 책임을 쥐어주느냐에 따라서 전반적인 협력의 방향성이 달라지고 흐름이 결정된다. 이에 따라서 적절한 객체에게 책임(Responsibility) 을 쥐어줘야 한다.

 

그 과정에서 5-GRASP 가 사용되기도 하는데 자세한 내용은 책임 주도 설계, thisblogfor 님의 블로그 를 참고하면 좋을것 같다

 

책임주도설계(Responsibility Driven Design)

책임주도설계(Responsibility Driven Design) OOP 쉽게 말해 책임을 어디에 배치하는가. 책임을 수행할 수 있는 적절한 객체를 찾아 할당하고, 책임을 수행하는 도중 다른 객체의 도움이 필요한 경우 메시

thisblogfor.me

 

단일 책임 원칙, Single Responsibility Priciple

 

단일 책임 원칙 이하 SRP 는 객체는 어떤 하나의 액터에 의해서만 동작한다 라는 어떤 개발 원칙이다.

 

하나의 액터에 의해서만 동작한다는 것은 변경되는 이유가 단 하나라는 이야기이다.

 

나는 결국 유지보수 관점에서 보자면 하나의 변경이 예상하지 못한 다른 협력에 저해가 되는것을 막아주는 장치라고 해석한다

 

유명한 SRP 의 이해자료중 하나는 엉클밥의 클린 아키텍처-SRP 에 급여를 관리하는 소프트웨어의 문제점 파트에서 확인할 수 있다

 

코드는 없지만 해당 블로그의 클린 아키텍처, SRP 와 OCP 에서 SRP 에 대한 내용을 참고할 수 있다.

 

[개발자 책읽기] 클린 아키텍처-소프트웨어 구조와 설계의 원칙 (7장 8장 - SRP 와 OCP)

해당 글은 Robert C.Martin 클린 아키텍처 라는 책을 읽고 학습한 내용을 정리 및 회고하는 글 입니다. 자세한 사항은 YES 24 클린 아키텍처 - 소프트웨어 구조와 설계의 원칙 에서 확인해주세요. 클린

wonit.tistory.com

 

RDD 의 책임과 SRP 의 책임은 다르다

 

결론은 RDD 의 책임은 설계적인 관점에서 어떠한 객체에게 어떠한 일을 하게 할 것인가? 에 대한 이야기이고 SRP 의 책임은 개발이나 유지보수의 관점에서 변경의 여파를 어떻게 잘 제어할 것인가? 에 대한 이야기다

 

정리해보자면

  • RDD 의 책임
    • 설계적 관점
    • 협력하는 공동체를 만들기 위한 수단
    • 모듈, 컴포넌트 수준의 관심사
  • SRP 의 책임
    • 개발, 유지보수
    • 변경의 여파를 제어하는 수단
    • 코드, 객체 수준의 관심사

즉, RDD 와 SRP 는 위상이 다르다는 이야기다

 

위의 내용을 적용해보자면 다음 문장이 이해가 갈 것이다

 

RDD 를 통해서 SRP 를 만족시킬 수 있지만, SRP 에서 RDD 를 수행할 수는 없다

 

마치며

 

객체지향에서 책임이라는 단어가 정말 많이 나온다.

 

이 경우도 그러하고 또 비슷한 용어의 구분이 필요한 떄가 존재한다.

 

바로 interface 이다

 

java 의 interface 와 설계의, 객체의 interface 는 서로 다른 용어이다.

 

java 의 인터페이스는 다형을 지원하는 한 가지 방법임과 동시에 언어적인 키워드이지만 객체의 interface 는 클라이언트가 수신 객체와 협력하는 방법 혹은 메시지를 수신하는 공개된 방법이다.

 

이 차이를 이해하지 못한다면 (나 처럼) GoF 의 디자인 패턴 책을 읽을 때 굉장한 혼동으로 인해서 책을 덮어버리고 만다

댓글