단일 책임 원칙과 우려 사항 분리의 차이점


답변:


39

SRP (Single Responsibility Principle)-각 클래스에 변경해야 할 한 가지 이유 만 제공하십시오. 및“변경 이유”==“책임”. 예 : 송장 클래스는 자체 인쇄 할 책임이 없습니다.

우려의 분리 (1974 년 이후). 우려 == 시스템의 특징. 각 우려 사항 처리 : 각 우려 사항에 대해 다른 우려 사항은 관련이 없습니다. 행동의 구현을 숨 깁니다.

에서 여기 .


원칙적으로 동일하지만 SoC만으로는 과도한 분리를 막는 것처럼 보이지 않습니다. Overseparation은 오버 커플 링만큼 나쁘지는 않지만, 구성 및 소프트웨어 유지 비용을 높이기 때문에 나쁩니다 (오버 커플 링과 동일한 문제-다른 이유). SoC는 두 가지의 매우 중요한 성공 요소를 요구합니다. 최소한 bob 삼촌 당 (1) '우려 사항'은 비즈니스 수준에서 우선입니다 (기술이 아님). (2) 함께 속한 것을 분리하는 것은 실수입니다. blog.cleancoder.com/uncle-bob/2014/05/08/…
FastAl

17

제 생각에는 단일 책임 원칙은 우려 사항 분리를 달성하기위한 도구 / 관용구 중 하나입니다.


3
뭐? 분리되지 않은 많은 객체 (! SOC)를 포함하는 비 중복 기능 (SRP)을 가진 애플리케이션을 쉽게 만들 수 있습니다.
Andrew Song

6
그러나 여러 책임이 있지만 관심사 분리 원칙을 고수하는 물체를 이미징하는 것은 훨씬 더 어렵습니다. 즉 하나가 더 나은 단일 책임 원칙 준수 (모든 수준에 대한) 우려의 실제 분리를 달성하기 위해
BostonLogan

17

우려 사항과 단일 책임 원칙의 분리 (SoC vs SRP)

링크 된 기사에서 :

우려 사항 분리 (SoC) – 컴퓨터 프로그램을 가능한 한 기능이 겹치는 별개의 기능으로 분리하는 프로세스입니다. 관심사는 프로그램에 대한 관심이나 초점입니다. 일반적으로 관심사는 기능 또는 동작과 동의어입니다. http://en.wikipedia.org/wiki/Separation_of_concerns

SRP (Single Responsibility Principle) – 모든 객체는 하나의 책임을 가져야하며 모든 서비스는 해당 책임과 협소하게 일치해야합니다. 어떤 수준에서 Cohesion은 SRP의 동의어로 간주됩니다. http://en.wikipedia.org/wiki/Single_responsibility_principle


4
이러한 정의에서 단일 책임 원칙의 동의어로 간주되는 수준의 응집력은 무엇입니까? 나는 일치, 논리적, 시간적, 절차 적, 기능적 등 많은 응집 수준 (낮음에서 높음)이 있음을 검색했습니다.이 설명에서 "기능적 응집"만을 의미합니까?
limonik

13

단일 책임은 객체가 단일 작업 단위를 담당 함을 나타냅니다.

Seperation of Concerns는 기능이 가능한 한 적게 겹치는 모듈로 애플리케이션을 분할해야한다고 말합니다.

유사한 최종 결과 ... 약간 다른 응용 프로그램.


객체와 모듈의 차이점은 무엇입니까? 나에게 모듈은 클래스이고 객체는 클래스 또는 클래스의 인스턴스
Rookian 2009

모듈은 여러 클래스 간의 상호 작용으로 구성된 응용 프로그램에서 유사한 기능의 전체 조각이 될 수 있습니다 (단일 책임 패턴을 따르는 경우 각 클래스는 단일 책임을 가짐).
Justin Niessner 2009

12

단일 책임 원칙과 우려 사항 분리는 실제로 동일합니다.

물론 당신은 둘 사이의 어떤 종류의 차이점을 알아 내려고하는 학문적 토론에서 수렁에 빠질 수 있습니다.하지만 그 이유는 무엇입니까? 모든 의도와 목적을 위해 그들은 동일한 것을 설명합니다. 가장 큰 문제는 사람들이 "우려"와 "책임"이 무엇인지 정확히 알고 싶어하는 데 너무 사로 잡혀 SRP와 SoC의 중요한 아이디어를 놓칠 수 있다는 것입니다.

그 아이디어는 단순히 코드베이스를 느슨하게 결합 된 분리 된 부분으로 나누는 것입니다. 이를 통해 여러 개발자가 서로 영향을주지 않고 서로 다른 부분에서 작업 할 수 있으며, 단일 개발자가 다른 부분을 손상시키지 않고 하나의 격리 된 부분을 수정할 수도 있습니다.

이는 모듈 수준에서 적용됩니다. 예를 들어 MVC는 SRP 및 SoC를 촉진하는 아키텍처 패턴입니다. 코드베이스는 격리 된 모델, 뷰 및 컨트롤러로 분할됩니다. 이렇게하면 모델과 관계없이 뷰를 수정할 수 있습니다. 둘 둘은 끔찍하게 얽혀 있지 않습니다.

낮은 수준에서 이것은 수업에도 적용되어야합니다. 단일 클래스에 수십 개의 메서드를 넣는 대신 코드를 여러 개로 나눕니다. 같은 이유로.

또한 메서드 수준에서도 큰 메서드를 작은 메서드로 분할합니다.

원칙적으로. SRP는 규칙이 아니라 원칙이므로 종교적으로 극단적으로 따를 필요가 없습니다 (읽을 수 없음 / 안됨). 예를 들어 너무 멀리 가고 각 클래스에 7 줄 메서드가 하나만있는 것은 아닙니다. 코드를 분리 된 부분으로 나누는 일반적인 원칙을 의미합니다. 요점은 더 나은 코드베이스와 더 안정적인 소프트웨어로 이어질 것입니다.


8

우려 사항 분리 (SoC).가능한 한 기능이 거의 겹치지 않도록 애플리케이션을 별개의 기능으로 나눕니다. (마이크로 소프트).

"관심"= "고유 한 기능"= "고유 한 섹션"

“우려”는 높은 수준과 낮은 수준 모두에서 작동합니다.

단일 책임 원칙에  따르면 모든 모듈 또는 클래스는 소프트웨어가 제공하는 기능의 단일 부분에 대한 책임이 있어야하며 해당 책임은 클래스에 의해 완전히 캡슐화되어야합니다. 모든 서비스는 그 책임과 좁게 일치해야합니다. (Wikipedia 정의)

“책임”=“변경 이유”무엇을 변경 합니까? "소프트웨어가 제공하는 기능의 단일 부분"= 기본 단위

결론

  • 단일 책임 원칙은 기본 단위에서 작동-> 낮은 수준에서 작동

  • 우려 사항 분리는 높은 수준과 낮은 수준 모두에서 작동합니다.

  • SRP와 SoC는 함께 문제를 분리합니다. 그들은이다
    정확하게 낮은 수준에서 동일


SRP는 또한 다른 수준에서 작동합니다. 라이브러리 수준, 클래스 수준 및 기능 수준에서보다 구체적인 책임이 있습니다.
Phil1970

7

이전 답변 중 Single Responsibility Principle 을 만든 Robert Martin의 인용문이 없기 때문에 여기에 더 권위있는 답변이 필요하다고 생각합니다.

SRP에 대한 Martin의 영감은 David Parnas, Edsger Dijkstra ( Concerns 라는 용어를 만들었습니다 ) 및 Larry Constantine ( Coupling and Cohesion 이라는 용어를 만들었습니다) 에서 영감을 얻었습니다 . Martin은 아이디어를 SRP에 통합했습니다.

단일 책임 원칙에 대한 또 다른 표현은 다음과 같습니다.

같은 이유로 변하는 것들을 모으십시오. 다른 이유로 변경되는 것들을 분리하십시오.

이것에 대해 생각해 보면 이것이 응집력과 결합을 정의하는 또 다른 방법이라는 것을 알게 될 것입니다. 우리는 같은 이유로 변화하는 것들 사이의 응집력을 높이고, 다른 이유로 변화하는 것들 사이의 결합을 줄이고 싶습니다.

그러나이 원칙에 대해 생각할 때 변화의 이유는 사람 이라는 것을 기억하십시오 . 그것은이다 사람들 의 변경을 요청합니다. 그리고 당신은 많은 다른 사람들이 다른 이유로 관심을 갖는 코드를 함께 혼합함으로써 그 사람들이나 자신을 혼동하고 싶지 않습니다.

원래 질문에 대해 SRP와 SoC의 사소한 차이점은 Martin 이 사람들 을 지칭하기 위해 관심사 라는 용어를 정제했다는 입니다.


3

우려 사항 분리는 프로세스입니다. Single Responsibility Principle은 설계 / 건축 철학입니다. 완전히 분리되어 있지는 않지만 다른 용도로 사용됩니다.


2

유사하지만 : SoC는 관심사와 관련이 있습니다. 복잡한 문제를 여러 관심사로 나누기 위해 SRP는 단 하나의 책임 만 갖습니다.


2

SRP와 SOC는 서로 다른 추상화 수준에서 작동합니다. 목적은 두 경우 모두 결합을 줄이고 응집력을 강화하는 것입니다. SRP는 객체 수준에서 더 많이 작동하지만 SOC는 기능 수준의 구현에서도 작동 할 수 있습니다. 함수는 하나의 객체로 구현 될 수 있지만 여러 객체로 구현 될 수도 있습니다. 따라서 두 원리의 결합과 응집력이 다를 수 있습니다.


2

관심사 분리 (SoC)와 단일 책임 원칙 (SRP)을 비교해 보았습니다.

차이점

  • SRP는 클래스 수준이지만 SoC는 각 컴퓨터 프로그램, 추상화 또는 때로는 아키텍처 수준에 있습니다.

  • SRP는 도메인을 단 하나의 책임 (변경해야하는 한 가지 이유)을 가진 응집력있는 클래스로 나누는 품질에 관한 것입니다. 반면에 SoC는 컨텍스트를 별개의 섹션으로 분리하기위한 설계 원칙으로, 각 섹션은 많은 도구 (예 : 클래스, 함수, 모듈, 패키지,. ..)이 목표에 도달하기 위해 다른 수준.

  • SRP의 개념은 응집력 (고 응집력)을 기반으로하는 반면 SoC는 각 추상화 수준에서 분자 성, 분할 및 정복 (D & C)에 가깝습니다.

  • SoC는 추상화와 같은 복잡성을 처리하는 데 좋은 설계 원칙이지만 책임있는 단일 클래스에 도달하려면 SoC 원칙을 훌륭한 솔루션으로 사용할 수 있습니다. 마찬가지로, 클래스가 하나 이상의 책임을 가지고 있음을 알 수있는 방법은 해당 클래스에서 다른 책임 (관심 사항)을 추출 할 수있는 경우입니다.

유사점

  • 이러한 각 원칙을 적용하면 컨텍스트가 더 재사용 가능하고 유지 관리 가능하며 견고하고 읽기 쉽고 ...

0

대답:

우려 사항 분리 (SoC) 는보다 다재다능한 용어입니다. 시스템 수준 또는 클래스 (또는 클래스 내의 메서드)와 같은 하위 수준에 적용될 수 있습니다.

SRP (Single Responsibility Principle) 는 낮은 수준 (예 : 수업)에서 SoC를 논의하는 데 사용됩니다.


그것에 대해 생각하는 방법 :

  1. 낮은 수준에서 SoC와 SRP는 동의어입니다. 따라서 SRP가 중복 용어라고 말할 수 있습니다. 또는 SoC는 시스템 수준을 설명하는 데만 사용해야합니다.

  2. (1)이 주어지면 SoC라는 용어는 다소 모호합니다. 논의가 높은 수준의 SoC에 관한 것인지 낮은 수준의 SoC에 관한 것인지 알기 위해서는 컨텍스트가 필요합니다.

  3. SRP가 낮은 수준의 용어라는 것을 기억하려면 다음과 같이 생각해보십시오. 일상적인 언어에서 "책임"은 일반적으로 특정 코드와 연결될 수있는 잘 정의 된 항목 인 반면 "우려 사항"은 일반적으로 모호하고 많은 관련 항목을 포함하므로 SoC가 SRP보다 시스템 수준을 논의하는 데 더 자연스럽게 적합합니다.

  4. SoC는 시스템 수준에서 적용되기 때문에 어떤 의미에서 SRP보다 더 강력한 요구 사항 / 원칙이며 시스템 수준에서 진정으로 달성되기 위해서는 시스템 구성 요소 개발에도 사용해야합니다. 즉, 높은 수준의 SoC는 낮은 수준의 적절한 SoC / SRP를 의미하지만 그 반대는 사실이 아닙니다. 포괄 시스템. 메서드 수준에서 달성되었지만 클래스 수준에서 위반 된 SoC / SRP의 예는 다음을 확인하세요. Artur Trosin의 블로그 게시물을 .


0

우려 사항 분리

SOC (Separation of Concerns) 원칙에 따르면 코드 아티팩트는 특정 측면에주의를 집중할 수 있어야합니다. 코드 아티팩트는 특정 함수에서 클래스, 전체 패키지 또는 전체 애플리케이션에 이르기까지 무엇이든 될 수 있습니다. SOC 원칙은 애플리케이션의 모든 아키텍처 수준에 적용될 수 있습니다. SOC가 적용되는 아키텍처의 예는 계층화 된 아키텍처입니다.

단일 책임 원칙

SRP (Single Responsibility Principle)는 "모듈은 단 하나의 변경 이유 만 가져야합니다"라고 명시합니다 (Clean Architecture, Martin, p. 62). SRP는 모듈 수준에 적용되며 SRP를 적용 할 때는 변경 이유에 초점을 맞춰야합니다.

결론

SOC 원칙은 코드 아티팩트가 특정 측면에주의를 집중할 수 있도록해야한다고 말합니다. SRP는 모듈 수준에서 변경 이유에주의를 집중해야한다고 명시함으로써이를 구체적으로 설명합니다. 따라서 SRP는 SOC입니다.

PS : 완전성을 위해 : 공통 폐쇄 원칙

CCP (Common Closure Principle)는 더 높은 수준 인 구성 요소 수준에서 SRP를 다시 설명하는 것입니다. CCP는 동일한 이유로 동시에 변경되는 클래스를 동일한 구성 요소로 모아야한다고 말합니다 (Clean Architecture, p. 105). CCP는 SOC의 또 다른 예입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.