결합도를 낮추기 위해서 다양한 방법을 사용할 수 있지만 가장 쉽게 생각할 수 있는 것이 객체지향 언어의 핵심 개념인 다형성(Polymorphism)을 이용하는 것이다.
다형성을 이용하려면 상속과 메소드 재정의 (Overriding) 그리고, 형변환이 필요하다.
앞서 프로그램에서 했던 TV 클래스들의 최상위클래스로 사용할 TV인터페이스를 추가하고, 모든 TV가 공통으로 가져야 할 메소드들을 추상메소드로 선언한다.
TV. java
package polymorphism;
public interface TV {
public void powerOn();
public void poweroff();
public void volumeUp();
public void volumeDown();
}
SamsungTV.java
package polymorphism;
public class SamsungTV implements TV {
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.java
package polymorphism;
public class LgTV implements TV {
public void powerOn() {
System.out.println("LgTV---전원 켠다.");
}
public void poweroff() {
System.out.println("LhTV--전원 끈다.");
}
public void volumeUp() {
System.out.println("LgTV---소리 올린다.");
}
public void volumeDown() {
System.out.println("LgTV---소리 내린다.");
}
}
인터페이스를 이용하여 모든 TV클래스가 같은 메소드들을 가질 수 밖에 없도록 강제할 수 있게 되었다.
package polymorphism;
public class TVUser {
public static void main(String[] args) {
TV tv = new SamsungTV();
tv.powerOn();
tv.volumeUp();
tv.volumeDown();
tv.powerOff();
}
}
TVUser 클래스는 TV 인터페이스 타입의 변수로 SamsungTV 객체로 참조하고 있다. 이렇게 묵시적 형변환을 이용하여 객체를 참조하면 SamsungTV를 LgTV 객체로 변경할 때, 참조하는 개체만 변경되면 되므로 객체를 쉽게 교체할 수 있다.
이렇게 다형성을 이용하면 TVUser와 같은 클라이언트 프로그램이 여러개 있더라도 최소한의 수정으로 TV를 교체할 수 있다.
'spring_project' 카테고리의 다른 글
스프링 IoC (0) | 2021.09.11 |
---|---|
디자인패턴 이용하기 (Factory 패턴) (0) | 2021.09.11 |
서블릿 컨테이너의 서블릿 객체관리 (0) | 2021.09.09 |
자바 기반의 프레임워크 & 스프링 프레임워크 특징 (0) | 2021.09.09 |
1. [스프링] 프로젝트 세팅 (0) | 2021.09.08 |