Single Responsibility Principle in GO
☝ Single Responsibility
"In any well-designed system, objects should only have a single responsibility." by Robert Martine.
잘 설계 된 모든 시스템에서 객체들은 오로지 1개의 책임만을 가지고 있어야 한다.
즉, 객체를 구현하는 코드는 오로지 한가지 일만을 효율적인 방법으로 처리하는데 집중해야 한다는 말이다. 이 말을 제대로 이해하기 위해서는 이러한 원칙을 위반하는 코드를 살펴보는 것이 좋다.
우선, 드론을 기반으로 배달을 하는 서비스를 지원하는 소프트웨어를 개발하고 있다고 가정해보자.
다음 코드는 Drone 이 배달과정에서 수행해야하는 몇 가지 책임들을 정의하는 코드라고 볼 수 있다.
// NavigateTo applies any required changes to the drone's speed
// vector so that its eventual position matches dst.
func (d *Drone) NavigateTo(dst Vec3) error { //... }
// Position returns the current drone position vector.
func (d *Drone) Position() Vec3 { //... }
// Position returns the current drone speed vector.
func (d *Drone) Speed() Vec3 { //... }
// DetectTargets captures an image of the drone's field of view (FoV) using
// the on-board camera and feeds it to a pre-trained SSD MobileNet V1 neural
// network to detect and classify interesting nearby targets. For more info
// on this model see:
// https://github.com/tensorflow/models/tree/master/research/object_detection
func (d *Drone) DetectTargets() ([]*Target, error) { //... }
상기 코드는 SRP(Single Responsibility Principle)원칙을 위반하고 있다.
그 이유는 2가지 복합적인 책임을 동시에 수행하고 있다고 볼 수 있기 때문이다.
- Navigation ( 비행 )
- Detection ( 탐지 )
사실 비행과 탐지라는 두가지 책임을 동시에 Drone 이라고 하는 객체 타입에 같이 선언하여 개발한다고 하더라도 처음 프로그램 동작에는 문제가 없을 수 있다. 하지만, 문제는 그 이후에 발생한다. 비행과 탐지라는 두 가지 책임이 동시에 존재하기 때문에 Coupling (결합) 이 발생하게 되고 그로 인해 추가적인 개발과 확장에 어려움을 가중 시킬 수 있다.
예를 들면, 탐지에 사용되는 인공지능 모델을 다른 것으로 사용한다든지, 다른 종류의 Drone에 기존의 동일한 탐지 코드를 사용한다든지 하고 싶을 떄 어쩔 수 없이 존재하는 결합상태 때문에 비행과 관련한 코드를 항상 유지해야 한다는 것이다.
Author And Source
이 문제에 관하여(Single Responsibility Principle in GO), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@youngstone89/Single-Responsibility-Principle-in-GO저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)