결합도란 하나의 클래스가 다른 클래스와 얼마나 많이 연결되어 있는지를 나타내는 표현이며 , 결합도가 높은 프로그램은 유지보수가 어렵다.
예제로
SamsungTV와 LgTV의 클래스를 만들고 시청에 필수 기능인 4가지의 메소드를 만들었다.
TVUser 클래스에서 두 TV클래스를 번갈아 사용하도록 프로그램을 구현하였다.
SamsungTV
public class SamsungTV {
public void powerOn() {
System.out.println("SamsungTV---전원 켠다.");
}
public void poweroff() {
System.out.println("SamsungTV---전원 끈다");
}
public void volumeUp() {
System.out.println("SamsungTV---소리 올린다.");
}
public void volumeDown() {
System.out.println("SamsungTV---소리 내린다.");
}
}
LgTV
public class LgTV {
public void turnOn() {
System.out.println("LgTV---전원 켠다.");
}
public void turnoff() {
System.out.println("LhTV--전원 끈다.");
}
public void soundUp() {
System.out.println("LgTV---소리 올린다.");
}
public void soundDown() {
System.out.println("LgTV---소리 내린다.");
}
}
TVUser
public class TVUser {
public static void main(String[] args) {
// SamsungTV tv = new SamsungTV();
// tv.powerOn();
// tv.poweroff();
// tv.volumeDown();
// tv.volumeUp();
LgTV tv = new LgTV();
tv.turnoff();
tv.turnOn();
tv.soundDown();
tv.soundUp();
}
}
SamsungTV와 LgTV는 메소드 시그니처가 다르므로 TVUser 코드 대부분을 수정해야 TV를 교체할 수 있다.
이렇게 되면 유지보수가 힘들어지며 TVUser와 같은 클라이언트 프로그램이 하나가 아니라 여러개라면 더욱 힘들어진다.
결합도를 낮추기 위해서는 다양한 방법을 사용할 수 있겠지만, 다음에 공부할 내용으로는 객체지향 언어의 핵심 개념인 다형성(Polymorephism)을 이용하는 것을 알아보도록 하겠다.