응집력과 커플 링의 차이점


486

응집력과 커플 링의 차이점은 무엇입니까?

커플 링과 응집력은 어떻게 소프트웨어 설계를 좋거나 나쁘게 만들 수 있습니까?

이 둘의 차이점과 전반적인 코드 품질에 미치는 영향을 설명하는 몇 가지 예는 무엇입니까?


2
그것을 확인하십시오 : msdn.microsoft.com/en-us/magazine/cc947917.aspx
Inv3r53

3
이 기사에서 지적하고 싶은 것은 : 한 번에 한 단계 씩 SOLID 소프트웨어 개발 . Grz, Kris.
Kris van der Mast 2016 년

4
주제에 관한 최신 포스트
janisz

답변:


702

응집력 은 클래스 (또는 모듈)가 할 수있는 일을 말합니다. 응집력이 낮 으면 클래스가 다양한 행동을 수행한다는 것을 의미합니다. 응집력이 높다는 것은 수업이해야 할 일, 즉 수업의 의도와 관련된 방법에만 집중한다는 것을 의미합니다.

낮은 응집력의 예 :

-------------------
| Staff           |
-------------------
| checkEmail()    |
| sendEmail()     |
| emailValidate() |
| PrintLetter()   |
-------------------

높은 응집력의 예 :

----------------------------
| Staff                   |
----------------------------
| -salary                 |
| -emailAddr              |
----------------------------
| setSalary(newSalary)    |
| getSalary()             |
| setEmailAddr(newEmail)  |
| getEmailAddr()          |
----------------------------

관해서 결합 , 두 개의 클래스 / 모듈이 서로를 향해 얼마나 관련 또는 의존성을 의미한다. 낮은 결합 클래스의 경우 한 클래스에서 중요한 것을 변경하면 다른 클래스에 영향을 미치지 않아야합니다. 커플 링이 높으면 코드를 변경하고 유지하기가 어려워집니다. 클래스가 밀접하게 연결되어 있으므로 변경하려면 전체 시스템을 개선해야합니다.

좋은 소프트웨어 디자인은 높은 응집력낮은 커플 링을 가지고 있습니다.


12
몇 가지 방법을 제거하고 몇 가지 방법을 추가하면 응집력이 증가하는 방법을 알 수 없습니다. 누군가 도와주세요.
Saket Jain은

3
@SaketJain 단순히 메소드를 제거하고 다른 메소드를 추가하는 것이 아닙니다. 메소드가 클래스의 목적과 관련되는 방식입니다 (설명이 명확 할 경우).
mauris

4
상단에 낮은 응집력의 예는 내가 실수 "고 cohession"라고하는 의미 생각, 꽤 잘 보이는
relipse

37
@SaketJain Staff 클래스는 이메일을 확인, 전송 또는 확인하는 곳이 아닙니다. 이러한 기능은 가상의 이메일 클래스에 들어가야하므로 응집력이 낮습니다. 두 번째 예에서 Staff 클래스에는 Staff 관련 데이터를 설정하고 가져 오기위한 적절한 정보 만 포함되어 있습니다. 다른 클래스에서 관리해야하는 작업은 수행하지 않습니다.
Antonio Pantano

3
@JonathanC 예제는 여전히 수학 예제처럼 차이를 증명할 필요가 없습니다. 도움이된다고 생각되는 예는 언제든지 답변하거나 의견을 말하십시오. setget기능은 "직원"상황에 더 특정 기능을 설명 - 높은 특이성주고 그 예를 더 높은 응집력을.
cellepo

81

응집력 은 모듈 내의 관계를 나타냅니다 .

커플 링 은 모듈 간의 관계 나타냅니다 .

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

응집력

  • 응집력은 모듈 내의 관계를 나타냅니다.
  • 응집력은 모듈의 상대적 기능 강도를 보여줍니다.
  • 응집력은 구성 요소 / 모듈이 단일 것에 집중하는 정도 (품질)입니다.
  • 설계하는 동안 시스템의 다른 모듈과의 상호 작용이 거의없는 단일 작업 (즉, 단일 사고)에 대한 응집력있는 구성 요소 / 모듈 포커스를 위해 노력해야합니다.
  • 응집력은 기본적으로 가시성을 가진 패키지로 모든 멤버를 볼 수있는 클래스 등 데이터 숨기기의 자연스러운 확장입니다. 응집력은 인트라 – 모듈 개념입니다.

커플 링

  • 커플 링은 모듈 간의 관계를 나타냅니다.
  • 커플 링은 모듈 간의 상대적 의존성 / 상호 의존성을 보여줍니다.
  • 커플 링은 구성 요소 / 모듈이 다른 모듈에 연결되는 정도입니다.
  • 설계하는 동안 낮은 커플 링을 위해 노력해야합니다. 즉 모듈 간의 종속성이 적어야합니다.
  • 개인 필드, 개인 메소드 및 비 공용 클래스를 작성하면 느슨한 결합이 제공됩니다.
  • 커플 링은 모듈 간 개념입니다.

링크를 확인


77

모듈 내에서의 높은 응집력 과 모듈 간의 낮은 결합 은 종종 OO 프로그래밍 언어의 고품질과 관련된 것으로 간주됩니다.

예를 들어, 각 Java 클래스의 코드는 내부 응집력이 높아야하지만 다른 Java 클래스의 코드에 가능한 한 느슨하게 연결되어 있어야합니다.

Meyer의 객체 지향 소프트웨어 구성 (제 2 판) 3 장 에서는 이러한 문제에 대해 자세히 설명합니다.


3
개념은 실제로 OO 프로그래밍으로 제한되지 않습니다. OO 언어의 목표는 프로그래머가 높은 응집력 / 낮은 결합의 목표를 향하도록하는 것입니다.
Hutch

57

응집력 은 소프트웨어 요소의 책임이 얼마나 관련되고 집중되어 있는지를 나타냅니다.

커플 링 은 소프트웨어 요소가 다른 요소에 얼마나 강력하게 연결되어 있는지를 나타냅니다.

소프트웨어 요소는 클래스, 패키지, 구성 요소, 서브 시스템 또는 시스템 일 수 있습니다. 시스템을 설계하면서 그리고이 소프트웨어 요소가하는 것이 좋습니다 높은 응집력 및 지원 낮은 커플 링을 .

응집력이 낮 으면 유지 보수, 이해 및 재사용이 어려운 모 놀리 식 클래스가 생성됩니다. 마찬가지로 High Coupling 은 밀접하게 결합 된 클래스를 생성하며 변경은 로컬이 아니고 변경이 어렵고 재사용이 감소하는 경향이 있습니다.

ConnectionPool다음 요구 사항으로 일반적인 모니터 가능 을 설계하는 가상 시나리오를 취할 수 있습니다 . 간단한 클래스와 같이 너무 많이 보일 수도 ConnectionPool있지만 기본적인 의도는 간단한 예제와 함께 낮은 결합높은 응집력 을 나타내는 것이므로 도움이 될 것입니다.

  1. 연결 지원
  2. 연결을 해제하다
  3. 연결 대 사용 횟수에 대한 통계 얻기
  4. 연결 대 시간에 대한 통계 얻기
  5. 나중에 검색 할 수 있도록 연결 검색 및 릴리스 정보를 데이터베이스에 저장하십시오.

응집력낮 으면ConnectionPool 이 모든 기능 / 책임을 아래처럼 단일 클래스에 강제로 채워 클래스를 설계 할 수 있습니다. 이 단일 클래스는 연결 관리를 담당하고 데이터베이스와 상호 작용하고 연결 통계를 유지 관리합니다.

낮은 응집력 연결 풀

높은 응집력 우리는 클래스에서 이러한 책임을 할당하고 더 유지 보수 및 재사용 할 수 있습니다.

높은 응집력 연결 풀

낮은 커플 링 을 설명하기 위해 ConnectionPool위 의 높은 응집력 다이어그램을 계속합니다 . 위의 다이어그램을 보면 높은 응집력을 지원하지만 클래스와 ConnectionPool밀접하게 연결 되어 있으며 직접 상호 작용합니다. 대신 커플 링을 줄이기 위해 인터페이스를 도입 하고이 두 클래스가 인터페이스를 구현하고 클래스에 등록하도록 할 수 있습니다 . 그리고는 이 청취자를 반복 및 연결 GET 및 출시 이벤트를 통보하고 덜 커플 링을 허용합니다.ConnectionStatisticsPersistentStoreConnectionListenerConnectionPoolConnectionPool

낮은 커플 링 연결

참고 / 단어 또는주의 : 이 간단한 시나리오에서는 과도하게 보일 수 있지만 응용 프로그램이 여러 타사 서비스와 상호 작용하여 트랜잭션을 완료해야하는 실시간 시나리오를 상상하는 경우 : 코드를 타사 서비스와 직접 연결 이는 타사 서비스의 변경으로 인해 여러 위치에서 코드가 변경 될 수 있음을 의미합니다. 대신 Facade이러한 여러 서비스와 내부적으로 상호 작용하고 서비스의 모든 변경이 로컬에 Facade적용 되고 타사와의 낮은 연결을 강제 할 수 있습니다. 서비스.


3
훌륭한 답변! 가능하다면 다른 예를 사용해도 되겠습니까? 연결 풀링이 모든 사람에게 명확하지 않을 수 있습니다. 어쨌든 정말 도움이되었습니다. 감사합니다!
Saket Jain이

ConnectionListener 인터페이스를 사용하면 커플 링을 줄이는 데 어떻게 도움이됩니까? 이해하기 쉬운 예제를 제공 할 수 있습니까?
abhishek gupta

1
@abhishekgupta이 예제에서는 관찰자 패턴을 사용하여 낮은 / 느슨한 커플 링을 달성했음을 알 수 있습니다. 이를 통해 관찰자는 어떻게 느슨하게 결합 된 디자인을 만들 수 있습니까?
Madhusudana Reddy Sunnapu

33

응집력이 증가하고 커플 링이 감소하면 소프트웨어 디자인이 향상됩니다.

Cohesion은 기능을 분할하여 기능과 관련이있는 데이터와 간결하고 밀접한 관계를 유지하며, 분리는 기능 구현이 시스템의 나머지 부분과 분리되도록합니다.

디커플링을 사용하면 소프트웨어의 다른 부분에 영향을주지 않고 구현을 변경할 수 있습니다.

응집력 은 구현이 기능에 더 구체적이고 유지 관리가 더 쉬워 지도록합니다.

결합을 줄이고 응집력을 높이는 가장 효과적인 방법은 인터페이스에 의한 설계 입니다.

즉, 주요 기능 객체는 구현하는 인터페이스를 통해서만 서로 '알아야'합니다. 인터페이스의 구현은 자연스러운 결과로서 응집력을 도입합니다.

일부 시나리오에서는 현실적이지 않지만 작동하는 디자인 목표가되어야합니다.

예 (매우 스케치) :

public interface IStackoverFlowQuestion
      void SetAnswered(IUserProfile user);
      void VoteUp(IUserProfile user);
      void VoteDown(IUserProfile user);
}

public class NormalQuestion implements IStackoverflowQuestion {
      protected Integer vote_ = new Integer(0);
      protected IUserProfile user_ = null;
      protected IUserProfile answered_ = null;

      public void VoteUp(IUserProfile user) {
           vote_++;
           // code to ... add to user profile
      }

      public void VoteDown(IUserProfile user) {
          decrement and update profile
      }

      public SetAnswered(IUserProfile answer) {
           answered_ = answer
           // update u
      }
}

public class CommunityWikiQuestion implements IStackoverflowQuestion {
     public void VoteUp(IUserProfile user) { // do not update profile }
     public void VoteDown(IUserProfile user) { // do not update profile }
     public void SetAnswered(IUserProfile user) { // do not update profile }
}

코드베이스의 다른 곳에서는 질문에 관계없이 질문을 처리하는 모듈을 가질 수 있습니다.

public class OtherModuleProcessor {
    public void Process(List<IStackoverflowQuestion> questions) {
       ... process each question.
    }
}

28

Cohesion에 대한 최고의 설명은 Bob 아저씨의 Clean Code에서 나옵니다

클래스에는 적은 수의 인스턴스 변수가 있어야합니다. 클래스의 각 메소드는 하나 이상의 해당 변수를 조작해야합니다. 일반적으로 메소드가 더 많은 변수를 조작할수록 해당 메소드가 클래스에 더 응집력이 있습니다. 각 메소드에서 각 변수를 사용하는 클래스는 최대한 응집력이 있습니다.

일반적으로 그러한 최대 응집력있는 클래스를 만드는 것은 바람직하지도 않습니다. 반면에 응집력을 높이고 싶습니다 . 응집력이 높으면 클래스의 메소드와 변수가 서로 의존적이며 논리적 전체로서 함께 매달려 있음을 의미합니다.

함수를 작게 유지하고 매개 변수 목록을 짧게 유지하는 전략으로 인해 일부 메소드가 사용하는 인스턴스 변수가 확산 될 수 있습니다. 이런 일이 발생하면 거의 항상 다른 클래스가 더 큰 클래스에서 벗어나려고한다는 것을 의미합니다. 변수와 메소드를 둘 이상의 클래스로 분리하여 새 클래스가 더 응집력이 있도록해야합니다.


나는 이것이 아마도 가장 좋은 설명 일 것이라는 데 동의합니다. 이것은 밥 삼촌에서 내가 좋아하는 것입니다. 그는 몇 가지 문구로 실제 의미를 설명 할 수 있습니다. 이 정의를 알면 응집력을 높이기 위해 주어진 수업에 수행해야 할 작업을 즉시 확인할 수 있습니다.
Pawel Dubiel

13

간단히 말해서 Cohesion 은 코드베이스의 일부가 논리적으로 단일 원자 단위를 형성하는 정도를 나타냅니다. 반면 커플 링 은 단일 유닛이 다른 유닛과 독립된 정도를 나타냅니다. 즉, 둘 이상의 장치 간 연결 수입니다. 숫자가 적을수록 커플 링이 낮아집니다.

본질적으로 높은 응집력은 서로 관련된 코드 기반의 일부를 한 곳에 유지하는 것을 의미합니다. 낮은 결합은 동시에 코드베이스의 관련되지 않은 부분을 가능한 많이 분리하는 것입니다.

응집력 및 결합 관점의 코드 유형 :

지침을 따르는 코드가 이상적 입니다. 느슨하게 결합되고 응집력이 있습니다. 이 그림으로 그러한 코드를 설명 할 수 있습니다.여기에 이미지 설명을 입력하십시오

God Object 는 높은 응집력과 높은 결합력을 도입 한 결과입니다. 안티 패턴이며 기본적으로 모든 작업을 한 번에 수행하는 단일 코드 조각을 나타냅니다. 다른 클래스 또는 모듈 사이의 경계가 잘못 선택 되면 잘못 선택 됩니다.여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오

파괴적인 디커플링 이 가장 흥미로운 것입니다. 프로그래머가 코드베이스를 너무 많이 분리하여 코드가 완전히 초점을 잃을 때 종종 발생합니다.여기에 이미지 설명을 입력하십시오

여기서 더 읽어 보세요


1
훌륭한 기사와 일러스트! 하나의 생각에 개선을 제안 할 수 있다면, '가난하게 선택 된'이 관련이없는 시맨틱을 가진 구성 요소 그룹을 작은 무리로 유지하는 방법을 좋아하지만 그 사이에 화살표가 더 많이 있어야한다고 생각합니다. 결국, 4 사각형 그래프에서도 이것이 '커플 링'축의 상위 범위에 해당하는 그래프입니다.
Slawomir Brzezinski

1
또한 '잘못 선택'하면 각 떼 안에 화살이 적어야한다고 말합니다. 기사에서 '폴더 구조'예제를 사용하면 '잘못 선택된'리포지토리로 분류되거나 팩토리는 서로 대화하지 않습니다.
Slawomir Brzezinski

업데이트 : 나는이 제안을 이미지의 원래 저자에게 제기 했으며 저자는 이에 동의했습니다 .
Slawomir Brzezinski

11

소프트웨어 엔지니어링의 응집력 은 특정 모듈의 요소가 함께 속하는 정도입니다. 따라서 소프트웨어 모듈의 소스 코드로 표현 된 각 기능이 얼마나 밀접하게 관련되어 있는지를 측정 한 것입니다.

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

예제와 그림으로 조금 더 자세히 읽고 싶다면 이것대한 블로그 게시물을 작성했습니다 . 나는 그것이 당신의 대부분의 질문에 대답한다고 생각합니다.


4

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

응집력은 단일 클래스가 어떻게 설계되었는지에 관한 모든 것을 말합니다. 응집력은 클래스가 단일의 집중된 목적으로 설계되도록하는 것과 가장 밀접하게 관련된 객체 지향 원칙입니다. 수업에 집중할수록 해당 수업의 응집력이 더 커집니다. 높은 응집력의 장점은 이러한 응집력이 낮은 응집력을 가진 클래스보다 유지 관리가 훨씬 쉽고 덜 자주 변경된다는 것입니다. 높은 응집력의 또 다른 이점은 잘 집중된 목적을 가진 수업이 다른 수업보다 재사용 가능성이 높다는 것입니다.

위의 이미지에서, 응집력이 낮은 경우 하나의 클래스 만이 공통적이지 않은 많은 작업을 수행하여 재사용 성 및 유지 보수 가능성을 줄입니다. 그러나 응집력이 높으면 모든 작업에 대해 특정 작업을 실행하기위한 별도의 클래스가 있으므로 사용성 및 유지 관리 성이 향상됩니다.


2

Cohesion (Co-hesion) : Co 를 의미 하는 Co , hesion 을 의미 합니다 . 서로 다른 물질의 입자를 서로 붙입니다.

실제 예 : img Courtesy
여기에 이미지 설명을 입력하십시오

전체는 파트-아리스토텔레스의 합보다 큽니다.

  • 응집력 은 순서 유형의 측정이며 일반적으로 "높은 응집력"또는 "낮은 응집력"으로 설명됩니다. 높은 응집력은 견고성, 신뢰성, 재사용 성 및 이해성을 포함하는 몇몇 바람직한 소프트웨어 특성과 관련되기 때문에 응집력이 높은 모듈이 바람직하다. 대조적으로, 낮은 응집력은 유지, 시험, 재사용 또는 이해하기 어려운 것과 같은 바람직하지 않은 특성과 관련이있다. 위키

  • 커플 링 은 일반적으로 응집력 과 대조됩니다 . 낮은 커플 링은 종종 높은 응집력과 관련이 있으며 그 반대도 마찬가지입니다. 낮은 커플 링은 종종 체계적인 컴퓨터 시스템과 좋은 디자인의 표시이며 높은 응집력과 결합 될 때 높은 가독성과 유지 관리 성의 일반적인 목표를 지원합니다. 위키


1

차이점은 다음과 같이 생각할 수 있습니다.

  • 응집력은 코드베이스의 일부가 논리적으로 단일 원자 단위를 형성하는 정도를 나타냅니다.
  • 커플 링은 단일 장치가 다른 장치와 독립적 인 정도를 나타냅니다.
  • 응집력을 손상시키지 않으면 서 전체 분리를 보관하는 것은 불가능하며 그 반대도 마찬가지입니다.

이 블로그 게시물 에서 자세한 내용을 작성합니다.


1

응집력 은 모듈의 상대적 기능 강도를 나타냅니다.

  • 응집력있는 모듈은 단일 작업을 수행하므로 프로그램의 다른 부분에서 다른 구성 요소와 거의 상호 작용할 필요가 없습니다. 간단히 말해서, 응집력있는 모듈은 (이상적으로) 한 가지 일만해야합니다.
  •  전통적인 견해 :

    모듈의 "단일 마인드"

  • OO보기 :

     응집력은 구성 요소 또는 클래스가 서로 및 클래스 또는 구성 요소 자체와 밀접한 관련이있는 특성 및 작업 만 캡슐화 함을 의미합니다.

  •  응집력 수준

     기능

     레이어

     커뮤니케이션

     순차

     절차

     시간

     유틸리티

커플 링 은 모듈 간의 상대적 상호 의존성을 나타냅니다.

  • 커플 링은 모듈 간의 인터페이스 복잡성, 모듈에 대한 입력 또는 참조 지점 및 인터페이스를 통과하는 데이터에 따라 다릅니다.

  • 기존의 관점 : 구성 요소가 다른 구성 요소와 외부 세계에 연결되는 정도

  • OO보기 : 클래스가 서로 연결되는 정도의 질적 측정

  • 커플 링 레벨

     내용

     공통

     제어

     스탬프

     데이터

     일반 통화

     타입 사용

     포함 또는 수입

     외부 번호


1

커플 링 = 두 모듈 간의 상호 작용 / 관계 ... 응집력 = 모듈 내 두 요소 간의 상호 작용

소프트웨어는 많은 모듈로 구성되어 있습니다. 모듈은 요소로 구성됩니다. 모듈이 프로그램이라고 생각하십시오. 프로그램 내의 함수는 요소입니다.

런타임시 프로그램 출력은 다른 프로그램의 입력으로 사용됩니다. 이를 모듈 간 통신 또는 프로세스 간 통신이라고합니다. 이것을 커플 링이라고도합니다.

단일 프로그램 내에서 함수의 출력은 다른 함수로 전달됩니다. 이것을 모듈 내에서 요소의 상호 작용이라고합니다. 이것을 응집력이라고도합니다.

예:

커플 링 = 서로 다른 두 가족 간의 의사 소통 ... 응집력 = 가족 내 아버지-자녀 간의 의사 소통.


1
그렇다면 소프트웨어에 미치는 영향과 관련하여
Itban Saeed

소프트웨어는 많은 모듈로 구성되어 있습니다. 모듈은 요소로 구성됩니다. 모듈이 프로그램이라고 생각하십시오. 프로그램 내의 함수는 요소입니다.
Dipankar Nalui 3

1

간단히 말해서 응집력 이란 클래스가 단일 개념을 나타내야한다는 것을 의미합니다.

모든 클래스 기능이 클래스가 나타내는 개념과 관련된 경우 클래스의 공용 인터페이스는 응집력이 있습니다. 예를 들어, CashRegister 클래스를 갖는 대신 CashRegister 및 Coin 기능을 결합하면 CashRegister 및 Coin 클래스의 두 클래스로 구성됩니다.

에서는 결합 이 클래스의 객체를 사용하기 때문에, 하나 개의 클래스는 서로 의존한다.

높은 커플 링의 문제점은 부작용을 일으킬 수 있다는 것입니다. 한 클래스를 한 번 변경하면 다른 클래스에서 예기치 않은 오류가 발생하여 전체 코드가 손상 될 수 있습니다.

일반적으로 높은 응집력과 낮은 결합은 고품질 OOP로 간주됩니다.


0

응집력 이라는 용어 는 실제로 소프트웨어 디자인에서 의미하는 바에 대해 약간의 직관적입니다.

응집력 공통의 의미는 서로 잘 붙어서 결합되어 분자 인력과 같은 강한 결합을 특징으로한다는 것입니다. 그러나 소프트웨어 디자인에서 이는 하나의 작업 만 수행하는 클래스를 위해 노력하는 것을 의미하므로 여러 하위 모듈이 포함되지 않습니다.

아마도 우리는 이런 식으로 생각할 수 있습니다. 부품이 유일한 부품 일 때 가장 응집력이 높습니다 (한 가지만 수행하고 더 이상 분해 할 수 없음). 이것이 소프트웨어 디자인에서 원하는 것입니다. 응집력은 단순히 "단일 책임"또는 "문제 분리"의 또 다른 이름입니다.

반면에 커플 링 이라는 용어 는 매우 직관적이므로 모듈이 너무 많은 다른 모듈에 의존하지 않고 연결된 모듈을 liskov 대체 원칙에 따라 쉽게 대체 할 수 있음을 의미합니다 .


사람들은 왜 수업 대신 단어 모듈을 계속 사용합니까?
북부의

1
@northerner는 더 일반적인 용어입니다.
zar

0

이론의 차이

응집력

  • 응집력은 모듈의 상대적 기능 강도를 나타냅니다.
  • 응집력있는 모듈은 단일 작업을 수행하므로 프로그램의 다른 부분에서 다른 구성 요소와 거의 상호 작용할 필요가 없습니다.
  • 응집력이 높고 결합력이 낮은 모듈은 다른 모듈과 기능적으로 독립적이라고합니다.

응집력의 분류

1. 동시 발생 2. 논리 3. 시간 4. 절차 5. 통신 6. 순차 7. 기능

커플 링

  • 커플 링은 모듈 간의 상대적 상호 의존성을 나타냅니다.
  • 두 모듈 간의 연결 정도는 인터페이스의 복잡성에 따라 다릅니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.