개발 이야기/Java

강한 결합과 약한 결합

올리버 2022. 5. 18. 17:56

강한 결합

어떠한 객체가 다른 객체에 강한 의존성을 가지고 있음을 말한다.

아래의 클래스를 보면  사람이 개를 훈련하다라는 의미를 부여할 수 있다.

public class Dog{
    public void train(){
        System.out.println("train dog");
    }
}
public class Cat{
    public void train(){
        System.out.println("train cat");
    }
}
public class Person{
    private Dog dog;
    
    public Person(){
        dog = new Dog();
    }
    
    public void trainAnimal(){
        dog.train();
    }
}

Person 클래스를 보면 맴버 변수로 Dog 클래스를 가지고 있다. 여기선 단점을 발견 할 수 있다.

  • Dog 클래스가 없는 경우 Person 클래스는 존재할 수 없다.
  • Dog 에서 Cat으로 변경하게 되면 Person의 코드를 변경해야한다.

즉, Person 클래스는 Dog 클래스에 의존하게 된다.

 

약한 결합

객체 간의 의존성을 약하게 하는 것이다.

public interface animal{
    void train();
}
public class Dog implements Animal{
    @Override
    public void train(){
        System.out.println("train dog");
    }
}
public class Cat implements Animal{
    @Override
    public void train(){
        System.out.println("train cat");
    }
}
public class Person{
    private Animal animal;
    
    public Person(Animal animal){
        this.animal = animal;
    }
    
    public void trainAnimal(){
        animal.train();
    }
}

Interface로 추상화하여 개발하게 되면 내부 클래스를 변경하지 않아도, 하나의 인터페이스로 대입되기 때문에, 생성자를 통하거나 수정 메소드를 통해 변수만 받으면 객체 변경이 가능해진다.(런타임 시 의존관계 결정)

즉 강한 결합에서 벗어난 약한 결합을 이룬다.