결합이란 무엇입니까?결합을 풀 수 있는 방법은 몇 가지가 있습니까?

7050 단어 java 기초 학습
프로젝트의 개발 과정에서 우리는 프로젝트의 코드 모듈이 가능한 한 낮은 결합과 높은 내집합을 하도록 강조하지만 무엇이 결합입니까?어떻게 저결합을 할 수 있습니까?많은 사람들이 의문을 느낄 수 있으니 다음은 결합이 무엇인지, 결합을 어떻게 풀어서 저결합을 실현하는지 설명해 드리겠습니다.

1. 결합은 무엇입니까?


결합이란 두 클래스 간의 긴밀한 관계를 의미하며 다음 코드를 보십시오.
  public class A{
        public int i;
    }

    public class B{
        public void put(A a){
            System.out.println(a.i);
        }
    }

위의 예에서 A클래스와 B클래스 사이에 강한 결합 관계가 존재하는데 B클래스의put 방법 매개 변수는 반드시 A클래스 유형이어야 하며 비A클래스 유형이어서는 안 된다.강한 결합 관계가 있으면 당연히 소위 약한 결합 관계도 존재한다. 아래의 코드를 보십시오.
 public interface IBase{
        void say();
    }

    public class A implements IBase{

        @Override
        public void say() {
            System.out.println("I am A");
        }
    }

    public class B implements IBase{

        @Override
        public void say() {
            System.out.println("I am B");
        }
    }

    public class C{
        public void put(IBase base){
            base.say();
        }
    }

위의 코드에서 C클래스와 A클래스, B클래스 사이에 약한 결합 관계가 존재한다. C클래스의put방법의 매개 변수는 A클래스 유형도 B클래스 유형일 수 있다. 강한 결합 관계에서 반드시 A클래스 유형이어야 하는 것과 달리 다른 유형은 모두 불가능한 상황이다.

2. 어떻게 저결합을 실현합니까?


낮은 결합을 실현하는 것은 두 종류 간의 결합을 풀고 클래스 간의 직접적인 관계를 해소하며 직접적인 관계를 간접적인 관계로 전환시키는 것이다. 다음은 두 가지 결합의 방향을 제공한다.1. 클래스의 상향 전환이나 인터페이스 리셋 방식을 이용하여 결합을 해결하는 두 가지 방식은 모두 하나의 사상이고 다태적인 사상을 이용한다. 위의 약한 결합 사례 코드는 인터페이스 리셋 방식이다. 다음은 클래스를 이용하여 상향 전환을 어떻게 결합하는지 보여준다.

    public class Base{
       public void say(){
            System.out.println("I am Base");
        }
    }
    public class A extends Base{

        @Override
        public void say() {
            System.out.println("I am A");
        }
    }

    public class B extends Base{

        @Override
        public void say() {
            System.out.println("I am B");
        }
    }

    public class C{
        public void put(Base base){
            base.say();
        }
    }

이 코드를 보면 위에서 인터페이스를 이용하여 이루어진 약한 결합 코드와 비슷하지 않습니까? 그들은 모두 계승 사상을 이용하여 이루어진 다태성입니다.
2. 어댑터 모드를 이용하여 결합 해체
이른바 강한 결합이란 클래스 사이에 직접적인 관계가 존재하기 때문에 그들 둘이 매우 긴밀하게 연결되는 것이 아니다. 그러면 나는 그들 사이에 한 층을 더해서 직접적인 관계를 간접적인 관계로 바꾼다. 아래의 코드를 보십시오.
 public class A{

        public void aSay() {
            System.out.println("I am A");
        }
    }

    public class Base{

        public A a;
        public Base(A a){
            this.a=a;
        }
        public void baseSay(){
            a.aSay();
        }
    }

    public class B{
        public void put(Base base){
            base.baseSay();
        }
    }

    public static void main(String[] args){
        A a=new A();
        Base base=new Base(a);
        B b=new B();
        b.put(base);
    }

위의 코드는 바로 어댑터 모드에서 결합을 해제하는 코드의 예이다. 이런 결합이 무슨 의미가 있는지 의문이 들 수 있다. 상기 코드는 설명만 하면 이러한 결합의 장점을 확실히 알 수 없지만 실제 프로젝트 개발 과정에서 A류와 관련된 수요가 바뀌면 우리는Base의 관련 코드만 수정하면 전체적인 수요를 바꿀 수 있다. 그렇지 않으면우리는 A를 수정해야 할 뿐만 아니라 B의 수정을 초래할 수도 있다.
결합의 본질은 클래스 간의 직접적인 관계를 간접적인 관계로 전환하는 것이다. 클래스가 위로 전환하든 인터페이스 리셋이든 어댑터 모델이든 모두 클래스 간에 한 층을 더해서 원래의 직접적인 관계를 간접적인 관계로 바꾸어 두 종류가 중간층에 강한 결합이고 두 종류 간에 약한 결합 관계로 변하게 한다.
이상은 순전히 개인적인 견해입니다. 만약 여러분들의 지적을 환영하지 않는다면.

좋은 웹페이지 즐겨찾기