Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java에서 긴밀한 결합과 느슨한 결합의 차이점은 무엇입니까?

<시간/>

단단한 결합 클래스와 객체가 서로 종속되어 있음을 의미합니다. 일반적으로 긴밀한 결합은 느슨한 결합 동안 코드의 유연성과 재사용성을 감소시키기 때문에 일반적으로 좋지 않습니다. 다른 클래스를 직접 사용하는 클래스의 종속성을 줄이는 것을 의미합니다.

밀접한 커플링

  • 밀접하게 결합된 개체 다른 개체에 대해 알아야 하는 개체이며 일반적으로 서로의 인터페이스에 크게 의존합니다.
  • 밀접하게 결합된 애플리케이션에서 하나의 개체 변경 다른 여러 개체를 변경해야 하는 경우가 많습니다.
  • 작은 응용 프로그램에서는 변경 사항을 쉽게 식별할 수 있고 놓칠 가능성이 적습니다. 그러나 대규모 응용 프로그램에서는 이러한 상호 종속성을 모든 프로그래머가 항상 알 수 있는 것은 아니며 변경 사항을 간과할 가능성이 있습니다.

예시

class A {
   public int a = 0;
   public int getA() {
      System.out.println("getA() method");
      return a;
   }
   public void setA(int aa) {
      if(!(aa > 10))
         a = aa;
   }
}
public class B {
   public static void main(String[] args) {
      A aObject = new A();
      aObject.a = 100; // Not suppose to happen as defined by class A, this causes tight coupling.
      System.out.println("aObject.a value is: " + aObject.a);
   }
}

위의 예에서 이러한 종류의 구현으로 정의된 코드는 긴밀한 결합을 사용하고 클래스 B가 클래스 A의 세부 사항에 대해 알고 있기 때문에 매우 나쁩니다. 클래스 A가 변수 'a'를 private로 변경하면 클래스 B도 중단됩니다. 클래스 A의 구현에서는 변수 'a'가 10보다 커서는 안 된다고 명시하고 있지만, 우리가 볼 수 있듯이 변수로 직접 이동하여 그 상태를 우리가 결정한 값으로 변경할 수 있는 것과 같은 규칙을 적용할 방법이 없습니다.

출력

aObject.a value is: 100

느슨한 연결

  • 느슨한 결합 한 구성 요소의 변경이 다른 구성 요소의 변경을 요구할 위험을 줄이는 것을 목표로 시스템 구성 요소 간의 상호 종속성을 줄이는 설계 목표입니다.
  • 느슨한 결합 시스템의 유연성을 높이고 유지 관리를 더 쉽게 하며 전체 프레임워크를 더 안정적으로 만들기 위한 훨씬 더 일반적인 개념입니다.

예시

class A {
   private int a = 0;
   public int getA() {
      System.out.println("getA() method");
      return a;
   }
   public void setA(int aa) {
      if(!(aa > 10))
         a = aa;
   }
}
public class B {
   public static void main(String[] args) {
      A aObject = new A();
      aObject.setA(100); // No way to set 'a' to such value as this method call will
                         // fail due to its enforced rule.
      System.out.println("aObject value is: " + aObject.getA());
   }
}

위의 예에서 이러한 종류의 구현으로 정의된 코드는 느슨한 결합을 사용하며 클래스 B가 클래스 A를 거쳐 규칙이 적용되는 상태를 가져와야 하므로 권장됩니다. 클래스 A가 내부적으로 변경되어도 클래스 B는 통신 수단으로 클래스 A만을 사용하므로 깨지지 않습니다.

출력

getA() method
aObject value is: 0