[oop] ‘커플 링이 낮고 응집력이 높다’는 것은

진술을 이해하는 데 문제가 있습니다 low in coupling and high in cohesion . 나는 구글에 대해 이것에 대해 많이 읽었지만 여전히 이해하기 어렵다.

내가 이해하는 것은 High cohesion 하는 것은 특정 기능을 수행하는 데 특화된 클래스가 있어야한다는 것을 의미합니다. 이것이 맞기를 바랍니다. 신용 카드 만 검증하는 신용 ​​카드 검증 클래스와 같습니다.

그리고 여전히 낮은 커플 링이 무엇을 의미하는지 이해하지 못합니까?



답변

내가 믿는 것은 이것입니다 :

응집력은 모듈 / 클래스의 요소가 서로 속하는 정도를 말하며, 관련 코드는 서로 가까이 있어야하므로 높은 응집력을 위해 노력하고 모든 관련 코드를 가능한 한 가깝게 묶어야합니다. 그것은 안에 있는 요소와 관련이 있습니다.모듈 / 클래스 있습니다.

커플 링은 서로 다른 모듈 / 클래스가 서로 의존하는 정도를 나타내며, 모든 모듈은 가능한 한 독립적이어야하므로 커플 링이 낮습니다. 다른 모듈 / 클래스 간의 요소와 관련이 있습니다.

전체 그림을 시각화하는 것이 도움이 될 것입니다.

여기에 이미지 설명을 입력하십시오

스크린 샷은 Coursera 에서 가져 왔습니다 .


답변

실제와 마찬가지로 소프트웨어 엔지니어링의 응집력 은 전체를 구성하는 요소 (우리의 경우 클래스를 말합시다)가 실제로 함께 속해 있다고 말할 수있는 정도입니다. 따라서 소프트웨어 모듈의 소스 코드로 표현 된 각 기능이 얼마나 밀접하게 관련되어 있는지를 측정 한 것입니다.

OO와 관련하여 응집력을 보는 한 가지 방법은 클래스의 메소드가 개인 속성을 사용하는 경우입니다.

토론은 이것보다 크지 만 응집력 은 높습니다 (또는 응집력이 가장 좋은 유형-기능적 응집력)은 모듈의 일부가 그룹화되어있을 때 모듈의 단일 정의 된 작업에 기여하기 때문입니다.

간단한 단어로의 결합 은 한 구성 요소가 (필수는 아니지만 클래스를 상상하지는 않지만) 다른 구성 요소의 내부 작동 또는 내부 요소에 대해 얼마나 많이 알고 있는지, 즉 다른 구성 요소에 대한 지식이 얼마나 많은지입니다.

느슨한 결합 은 시스템 또는 네트워크에서 구성 요소를 상호 연결하여 해당 구성 요소가 실제로 가능한 한 최소한으로 서로 종속되도록하는 방법입니다.

나는 이것에 관한 블로그 게시물을 썼다 . 예제 등을 통해이 모든 내용에 대해 자세히 설명합니다. 또한 이러한 원칙을 따라야하는 이유의 이점도 설명합니다.


답변

소프트웨어 디자인에서 높은 응집력 은 클래스가 한 가지 일을 잘 수행해야 함을 의미합니다. 높은 응집력은 단일 책임 원칙 과 밀접한 관련이 있습니다.

낮은 커플 링 은 클래스가 가능한 최소한의 종속성을 가져야 함을 나타냅니다. 또한 존재해야하는 종속성은 약한 종속성이어야합니다. 구체적인 클래스에 대한 종속성보다는 인터페이스에 대한 종속성을 선호하거나 상속보다 컴포지션을 선호해야합니다.

높은 응집력과 낮은 결합은 유지하기 쉬운 더 나은 코드를 제공합니다.


답변

짧고 명확한 답변

  • 높은 응집력 : 하나의 클래스 / 모듈 내의 요소는 기능적으로 함께 속해야하며 하나의 특정 작업을 수행해야합니다.
  • 느슨한 결합 : 서로 다른 클래스 / 모듈 중에서 최소한의 종속성이 있어야합니다.

답변

낮은 커플 링은 두 개 또는 많은 모듈과 관련이 있습니다. 한 모듈의 변경으로 인해 다른 모듈에서 많은 변경이 발생하면 서로 관련이 있다고합니다. 인터페이스 기반 프로그래밍이 도움이됩니다. 모듈 간의 인터페이스 (상호 작용 평균)가 변경되지 않았으므로 모듈 내의 변경 사항은 다른 모듈에 영향을 미치지 않습니다.

높은 응집력-비슷한 것들을 함께 모으십시오. 따라서 클래스에는 관련 작업을 수행하는 메소드 또는 동작이 있어야합니다. 과장된 나쁜 예를 들기 위해 : List 인터페이스의 구현에는 String과 관련된 작업이 없어야합니다. String 클래스는 String과 관련된 메소드와 필드를 가져야하며 마찬가지로 List 구현에는 해당하는 것이 있어야합니다.

희망이 도움이됩니다.


답변

이해하기 쉬운 긴 이야기 짧고 낮은 커플 링은 시스템의 올바른 기능에 영향을 미치지 않고 구성 요소를 교체 할 수 있음을 의미했습니다. 기본적으로 시스템을 손상시키지 않고 개별적으로 업데이트 할 수있는 기능적인 구성 요소로 시스템을 변조


답변

스마트 폰 있어요? 하나의 큰 앱이나 많은 작은 앱이 있습니까? 한 앱이 다른 앱에 응답합니까? 다른 앱을 설치, 업데이트 및 / 또는 제거하는 동안 하나의 앱을 사용할 수 있습니까? 각 앱이 자체 포함되어 있다는 것은 높은 응집력입니다. 각 앱이 다른 앱과 독립적이라는 것은 낮은 커플 링입니다. DevOps는이 아키텍처를 선호합니다. 즉, 시스템 전체를 중단시키지 않고 개별 연속 배포를 수행 할 수 있기 때문입니다.