결합도(Coupling)가 높은 프로그램
package polymorphism;
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---소리 내린다.");
}
}
package polymorphism;
public class LgTV {
public void turnOn(){
System.out.println("LgTV---전원 켠다.");
}
public void turnOff(){
System.out.println("LgTV---전원 끈다.");
}
public void soundUp(){
System.out.println("LgTV---소리 울린다.");
}
public void soundDown(){
System.out.println("LgTV---소리 내린다.");
}
}
package polymorphism;
public class TVUser {
public static void main(String[] args) {
SamsungTV tv = new SamsungTV();
tv.powerOn();
tv.volumeUp();
tv.volumeDown();
tv.powerOff();
// LgTV tv = new LgTV();
// tv.turnOn();
// tv.soundUp();
// tv.soundDown();
// tv.turnOff();
}
}
결합도를 낮추는 방법 - 1 (다형성을 이용하라)
package polymorphism;
public interface TV {
public void powerOn();
public void powerOff();
public void volumeUp();
public void volumeDown();
}
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---소리 내린다.");
}
}
package polymorphism;
public class LgTV implements TV {
public void powerOn(){
System.out.println("LgTV---전원 켠다.");
}
public void powerOff(){
System.out.println("LgTV---전원 끈다.");
}
public void volumeUp(){
System.out.println("LgTV---소리 울린다.");
}
public void volumeDown(){
System.out.println("LgTV---소리 내린다.");
}
}
package polymorphism;
public class TVUser {
public static void main(String[] args) {
TV tv = new SamsungTV();
tv.powerOn();
tv.volumeUp();
tv.volumeDown();
tv.powerOff();
}
}
결합도를 낮추는 방법 - 2 (디자인 패턴을 이용하라)
package polymorphism;
public class BeanFactory {
public Object getBean(String beanName){
if(beanName.equals("samsung")){
return new SamsungTV();
}else if(beanName.equals("lg")){
return new LgTV();
}
return null;
}
}
package polymorphism;
public class TVUser {
public static void main(String[] args) {
BeanFactory factory = new BeanFactory();
TV tv = (TV)factory.getBean(args[0]);
tv.powerOn();
tv.volumeUp();
tv.volumeDown();
tv.powerOff();
}
}
스프링 컨테이너의 종류
구현 클래스 | 기능 |
GeneticcXmlApplicationContext | 파일 시스템이나 클래스 경로에 있는 XML 설정파일을 로딩하여 구동하는 컨테이너 |
XmlWebApplicationContext | 웹 기반의 스프링 애플리케이션을 개발할 때 사용하는 컨테이너 |
'기타 > 스프링' 카테고리의 다른 글
[Spring] ant_path_mathcher (0) | 2022.05.29 |
---|---|
4. 스프링 어노테이션(Annotation) (0) | 2020.10.09 |
3. 스프링 의존관계 테스트 (0) | 2020.10.09 |
1. 스프링 시작 (0) | 2020.09.18 |