개발 이야기/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로 추상화하여 개발하게 되면 내부 클래스를 변경하지 않아도, 하나의 인터페이스로 대입되기 때문에, 생성자를 통하거나 수정 메소드를 통해 변수만 받으면 객체 변경이 가능해진다.(런타임 시 의존관계 결정)
즉 강한 결합에서 벗어난 약한 결합을 이룬다.