클라이언트가 TV를 사용하는 상황이다.
이런 클래스를 가지는 삼성 TV가 있다.
class SamsungTv {
private boolean power;
private int channel;
public void togglePower() {
power = !power;
}
public void channelUp() {
channel++;
}
public void channelDown() {
channel--;
}
}
클라이언트는 이렇게 삼성 TV의 인스턴스를 사용하여 조작할 수 있다.
public class Client {
public static void main(String[] args) {
SamsungTv stv = new SamsungTv();
stv.togglePower();
stv.channelDown();
stv.channelUp();
}
}
여기서 TV를 LG TV로 바꾼다고 해보자.
class LgTv {
private boolean power;
private int channel;
public void changePower() {
power = !power;
}
public void plusChannel() {
channel++;
}
public void minusChannel() {
channel--;
}
}
클라이언트는 LG TV를 쓰기위해 조작법을 새로 배워야한다.
public class Client {
public static void main(String[] args) {
// SamsungTv stv = new SamsungTv();
// stv.togglePower();
// stv.channelDown();
// stv.channelUp();
LgTv ltv = new LgTv();
ltv.changePower();
ltv.minusChannel();
ltv.changePower();
}
}
인터페이스를 이용해서 결합도를 낮출 수 있다.
interface Tv {
void togglePower();
void channelUp();
void channelDown();
}
각각의 TV 클래스에서는 이 인터페이스를 구현하도록 한다.
class SamsungTv implements Tv{
private boolean power;
private int channel;
public void togglePower() {
power = !power;
}
public void channelUp() {
channel++;
}
public void channelDown() {
channel--;
}
}
class LgTV implements Tv{
private boolean power;
private int channel;
public void togglePower() {
power = !power;
}
public void channelUp() {
channel++;
}
public void channelDown() {
channel--;
}
}
이제 클라이언트는 클래스를 직접 조작하는게 아니고 인터페이스를 이용해서 조작하게 한다.
public class Client {
public static void main(String[] args) {
Tv tv = ***new SamsungTv()***;
tv.togglePower();
tv.channelDown();
tv.channelUp();
}
}
public class Client {
public static void main(String[] args) {
Tv tv = ***new LgTv()***;
tv.togglePower();
tv.channelDown();
tv.channelUp();
}
}
하지만 여전히 코드부분을 건드려야한다.