728x90
반응형

TV 클래스들의 최상위 부모로 사용할 TV 인터페이스 생성,

모든 TV가 공통으로 가져야 할 메소드들을 추상 메소드로 선언

 

package polymorphism;

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

 

이제 SamsungTV와 LgTV 클래스 생성

 

LgTV

package polymorphism;

public class LgTV implements TV{

	public void powerOn() {
		// TODO Auto-generated method stub
		System.out.println("LgTV----전원 킨다.");
	}

	public void powerOff() {
		// TODO Auto-generated method stub
		System.out.println("LgTV----전원 끈다.");
	}

	public void volumeUp() {
		// TODO Auto-generated method stub
		System.out.println("LgTV----볼륨 높인다.");
	}

	public void volumeDown() {
		// TODO Auto-generated method stub
		System.out.println("LgTV----볼륨 낮춘다.");
	}
	
}

 

SamsungTV

package polymorphism;

public class SamsungTV implements TV{

	public void powerOn() {
		// TODO Auto-generated method stub
		System.out.println("SamsungTV----전원 켠다.");
	}

	public void powerOff() {
		// TODO Auto-generated method stub
		System.out.println("SamsungTV----전원 끈다..");
	}

	public void volumeUp() {
		// TODO Auto-generated method stub
		System.out.println("SamsungTV----볼륨 높인다.");
	}

	public void volumeDown() {
		// TODO Auto-generated method stub
		System.out.println("SamsungTV----볼륨 낮춘다.");
	}
	
}

 

 

TV를 교체할 때, 클라이언트 소스를 수정하지 않고 TV를 교체할 수 있다면 유지보수는 더 쉬워진다.

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;
	}

}

 getBean()메소드는 매개변수로 받은 beanName에 해당하는 객체를 생성해 리턴한다. if와 else if문을 사용했으므로 반드시 해당하지 않는 조건을 생각해 return null을 사용한다. 

 

 

 

디자인 패턴을 이용해 TVUser 생성

이제 이 두 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)를 써야하는 이유는 결합도를 낮추기 위해 사용
		tv.powerOn();
		tv.volumeUp();
		tv.volumeDown();
		tv.powerOff();
	}

}

j

 

실행 방법

TVUser 클래스 마우스 우클릭 ->  Run As -> Run Configurations -> Arguments -> Program arguments : lg,samsung

 

 

[그림1] 실행 순서
[그림2] 실행 순서

 

 

위의 방법을 끝내고 Run을 누르면 이제 결과가 나온다

[그림3] 실행 결과

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기