본문으로 바로가기

2. 스프링의 시작_2

category 개발/스프링 2020. 10. 9. 09:31
728x90

결합도(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 웹 기반의 스프링 애플리케이션을 개발할 때 사용하는 컨테이너

 

728x90

'개발 > 스프링' 카테고리의 다른 글

[Spring] ant_path_mathcher  (0) 2022.05.29
4. 스프링 어노테이션(Annotation)  (0) 2020.10.09
3. 스프링 의존관계 테스트  (0) 2020.10.09
1. 스프링 시작  (0) 2020.09.18