능글맞은 구렁이
Spring-polymorphism(결합성테스트) 본문
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)
'Framework > Spring' 카테고리의 다른 글
Spring-Annotation(어노테이션) (0) | 2021.06.15 |
---|---|
Spring-의존성주입(인젝션) (0) | 2021.06.15 |
Spring-사용방법, 프로젝트 생성시 주의 (0) | 2021.06.15 |
Spring-컨테이너종류, XML설정 (0) | 2021.06.14 |
Spring-인텔리제이 프로젝트생성 (0) | 2021.06.13 |