능글맞은 구렁이

Spring-polymorphism(결합성테스트) 본문

Framework/Spring

Spring-polymorphism(결합성테스트)

보라색츄르 2021. 6. 15. 14:16

2021.06.14 - [Spring] - Spring-컨테이너종류, XML설정

 

*결합성이 높은 프로그램*

 

package polymorphism;

public class TVuser {


	public static void main(String[] args) {
		/**결합도가 높은 프로그램**/
		SamsungTV stv=new SamsungTV(); 
		stv.powerOn();
		stv.powerOff();
		stv.volumeUp();
		stv.volumeDown();
		//LgTV로 바꿀경우 객체나 생성자나 메서드들을 전부다 바꿔줘야한다.
		
	}

}

------------------------------------------------------------------------------------------

 

 

*결합도가 낮은 프로그램(인터페이스사용)*

 

package polymorphism;

public class TVuser {


	public static void main(String[] args) {
	
		 TV tv=new SamsungTV();
		 tv.powerOn();
		 tv.powerOff();
		 tv.volumeUp();
		 tv.volumeDown();
		
	}

}
-----------------------------

package polymorphism;

public interface TV {
	public void powerOn();
	public void powerOff();
	public void volumeUp();
	public void volumeDown();
}


---------------------

package polymorphism;

public class LgTV implements TV {

	public LgTV() {
		System.out.println("LgTV 객체 생성");
	}

	@Override
	public void powerOn() {
		System.out.println("LgTV---전원on");
	}

	@Override
	public void powerOff() {
		System.out.println("LgTV---전원off");
	}

	@Override
	public void volumeUp() {
		System.out.println("LgTV---소리up");
	}

	@Override
	public void volumeDown() {
		System.out.println("LgTV---소리down");
	}

	
}
------------------------

package polymorphism;

public class SamsungTV implements TV{

	public SamsungTV() {
		System.out.println("SamsungTV 객체생성");
	}

	@Override
	public void powerOn() {
		System.out.println("SamsungTV---전원on");
	}

	@Override
	public void powerOff() {
		System.out.println("SamsungTV---전원off");
	}

	@Override
	public void volumeUp() {
		System.out.println("SamsungTV---소리up");
	}

	@Override
	public void volumeDown() {
		System.out.println("SamsungTV---소리donw");
	}


	
}

*결합성이 더 낮은 프로그램!(팩토리패턴)*

package polymorphism;

public class BeanFactory {

	public BeanFactory() {
	}
	
	public Object getBean(String beanName){
		if(beanName.equals("samsung")){
			return new SamsungTV();
		}else if(beanName.equals("lg")){
			return new LgTV();
		}
		return null;
	}//getBean END

}//BeanFactory END
--------------------------
package polymorphism;

public class TVuser {


	public static void main(String[] args) {
		System.out.println(args[0]); //args[0] : 외부로부터 전달된 문자열
		
		BeanFactory factory=new BeanFactory();
		TV tv=(TV)factory.getBean(args[0]);
		
		 tv.powerOn();
		 tv.powerOff();
		 tv.volumeUp();
		 tv.volumeDown();
		
	}

}
------------------------

package polymorphism;

public interface TV {
	public void powerOn();
	public void powerOff();
	public void volumeUp();
	public void volumeDown();
}


---------------------

package polymorphism;

public class LgTV implements TV {

	public LgTV() {
		System.out.println("LgTV 객체 생성");
	}

	@Override
	public void powerOn() {
		System.out.println("LgTV---전원on");
	}

	@Override
	public void powerOff() {
		System.out.println("LgTV---전원off");
	}

	@Override
	public void volumeUp() {
		System.out.println("LgTV---소리up");
	}

	@Override
	public void volumeDown() {
		System.out.println("LgTV---소리down");
	}

	
}
------------------------

package polymorphism;

public class SamsungTV implements TV{

	public SamsungTV() {
		System.out.println("SamsungTV 객체생성");
	}

	@Override
	public void powerOn() {
		System.out.println("SamsungTV---전원on");
	}

	@Override
	public void powerOff() {
		System.out.println("SamsungTV---전원off");
	}

	@Override
	public void volumeUp() {
		System.out.println("SamsungTV---소리up");
	}

	@Override
	public void volumeDown() {
		System.out.println("SamsungTV---소리donw");
	}


	
}

main => run Configurations => Arguments => Program arguments -> samsung or lg 입력=> run

 

 

 

 

*컨테이너를 이용*

 

 

applicationContext-> next-> beans -> finsh

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

	<bean id="tv" class="polymorphism.SamsungTV"></bean>
</beans>
---------------
package polymorphism;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;

public class TVuser {


	public static void main(String[] args) {
		//1. Spring Container 구동
		AbstractApplicationContext factory=new GenericXmlApplicationContext("applicationContext.xml");
		TV tv=(TV)factory.getBean("tv");
		
		//2. Spring Container 로 부터 필요한 빈 객체를 요청(lookup)
		 tv.powerOn();
		 tv.powerOff();
		 tv.volumeUp();
		 tv.volumeDown();
		
		 
		 //3. Spring conteiner종료
		 factory.close();
	}

}
----------------------
package polymorphism;

public class BeanFactory {

	public BeanFactory() {
	}
	
	public Object getBean(String beanName){
		if(beanName.equals("samsung")){
			return new SamsungTV();
		}else if(beanName.equals("lg")){
			return new LgTV();
		}
		return null;
	}//getBean END

}//BeanFactory END
------------------------

package polymorphism;

public interface TV {
	public void powerOn();
	public void powerOff();
	public void volumeUp();
	public void volumeDown();
}


---------------------

package polymorphism;

public class LgTV implements TV {

	public LgTV() {
		System.out.println("LgTV 객체 생성");
	}

	@Override
	public void powerOn() {
		System.out.println("LgTV---전원on");
	}

	@Override
	public void powerOff() {
		System.out.println("LgTV---전원off");
	}

	@Override
	public void volumeUp() {
		System.out.println("LgTV---소리up");
	}

	@Override
	public void volumeDown() {
		System.out.println("LgTV---소리down");
	}

	
}
------------------------

package polymorphism;

public class SamsungTV implements TV{

	public SamsungTV() {
		System.out.println("SamsungTV 객체생성");
	}

	@Override
	public void powerOn() {
		System.out.println("SamsungTV---전원on");
	}

	@Override
	public void powerOff() {
		System.out.println("SamsungTV---전원off");
	}

	@Override
	public void volumeUp() {
		System.out.println("SamsungTV---소리up");
	}

	@Override
	public void volumeDown() {
		System.out.println("SamsungTV---소리donw");
	}


	
}

 

 

1. INFO : org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [applicationContext.xml]
2. INFO : org.springframework.context.support.GenericXmlApplicationContext - Refreshing org.springframework.context.support.GenericXmlApplicationContext@1c655221: startup date [Tue Jun 15 14:16:52 KST 2021]; root of context hierarchy

3. 객체생성

4. 메서도호출

5. INFO : org.springframework.context.support.GenericXmlApplicationContext - Closing org.springframework.context.support.GenericXmlApplicationContext@1c655221: startup date [Tue Jun 15 14:16:52 KST 2021]; root of context hierarchy

 

실행되는 이유 log4j.xml

 

 

1. [applicationContext.xml] : 우리가 지정한 파일을 읽어내기위한 객체생성.XmlBeanDefinitionReader

2. GenericXmlApplicationContext : 그 객체가 만들어 진곳 .GenericXmlApplicationContext@1c655221

3. getbean : 에 의해 객체 생성

4. 메소드 호출~~

5. GenericXmlApplicationContext 종료 (Closing org.springframework.context.support.GenericXmlApplicationContext@1c655221: startup date [Tue Jun 15 14:16:52 KST 2021]; root of context hierarchy)


 

Comments