결합도를 낮추기 위한 또 다른 방법으로는 디자인 패턴을 이용하는 방법이 있다.
다형성을 이용하는 방법은 메소드를 호출할 때 인터페이스를 이용함으로써 쉽게 교체할 수 있지만, 변경하고자 할 때, 객체를 생성하는 소스를 수정해야만 한다.
Factory 패턴을 적용하면, 클라이언트에서 사용할 객체 생성을 캡슐화하여 TVUser와 TV사이를 느슨한 결합상태로 만들어준다. Factory 패턴이 적용된 BeanFactory클래스를 추가한다.
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;
}
}
BeanFactory 클래스의 getBean() 메소드는 매개변수로 받은 beanName에 해당하는 객체를 생성하여 리턴한다.
이제 이 BeanFactory 클래스를 이용하여 사용할 TV객체를 획득하도록 TVUser 클래스를 수정한다.
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();
}
}
이런 결과를 얻을 수 있었던 것은 TV객체를 생성하여 리턴하는 BeanFatory 때문이다. 클라이언트에 해당하는 TVUser는 자신이 필요한 객체를 직접 생성하지 않는다. 만약 그랬다면 TV가 변경될 때마다 소스를 수정해야 했을 것이다.
TVUser은 단지 객체가 필요하다는 것을 BeanFatory에 요청했을 뿐이고, BeanFatory가 클라이언트가 사용할 TV객체를 적절하게 생성하여 넘겨준 것이다.
'spring_project' 카테고리의 다른 글
스프링 IoC (0) | 2021.09.11 |
---|---|
다형성 이용하기 (0) | 2021.09.11 |
서블릿 컨테이너의 서블릿 객체관리 (0) | 2021.09.09 |
자바 기반의 프레임워크 & 스프링 프레임워크 특징 (0) | 2021.09.09 |
1. [스프링] 프로젝트 세팅 (0) | 2021.09.08 |