Spring

[ Spring ] IOC (Inversion of Control) - 인터페이스 활용

dauneee 2022. 4. 1. 15:40

1. TV라는 인터페이스를 생성하여 강제성을 부여해준다.

 

package test;

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

 

2. TV를 implements 하여 LgTV와 SamsungTV를 만들어준다.

package test;

public class SamsungTV implements TV {
	public SamsungTV() {
		System.out.println("SamsungTV 객체생성");
	}
	public void turnOn() {
		System.out.println("전원을 켭니다.");
	}
	public void turnOff() {
		System.out.println("전원을 끕니다.");
	}
	public void soundUp() {
		System.out.println("소리를 올립니다.");
	}
	public void soundDown() {
		System.out.println("소리를 내립니다.");
	}
	@Override
	public void powerOn() {
		// TODO Auto-generated method stub
		System.out.println("전원 ON");
	}
	@Override
	public void powerOff() {
		// TODO Auto-generated method stub
		System.out.println("전원 OFF");
	}
	@Override
	public void volumeUp() {
		// TODO Auto-generated method stub
		System.out.println("음량 UP");
	}
	@Override
	public void volumeDown() {
		// TODO Auto-generated method stub
		System.out.println("음량 DOWN");
	}	
}
package test;

public class SamsungTV implements TV {
	public LgTV() {
		System.out.println("LgTV 객체생성");
	}
	public void turnOn() {
		System.out.println("전원을 켭니다.");
	}
	public void turnOff() {
		System.out.println("전원을 끕니다.");
	}
	public void soundUp() {
		System.out.println("소리를 올립니다.");
	}
	public void soundDown() {
		System.out.println("소리를 내립니다.");
	}
	@Override
	public void powerOn() {
		// TODO Auto-generated method stub
		System.out.println("전원 ON");
	}
	@Override
	public void powerOff() {
		// TODO Auto-generated method stub
		System.out.println("전원 OFF");
	}
	@Override
	public void volumeUp() {
		// TODO Auto-generated method stub
		System.out.println("음량 UP");
	}
	@Override
	public void volumeDown() {
		// TODO Auto-generated method stub
		System.out.println("음량 DOWN");
	}	
}

 

 

3. 인터페이스를 통하여 클라이언트는 TV를 바꾸어도 같은 리모컨으로 동작시킬 수 있게 된다.

package test;

public class Client {
	public static void main(String[] args) {
		// 1. 다형성(인터페이스)
		TV tv=new SamsungTV();
		tv.powerOn();
		tv.volumeUp();
		tv.powerOff();
	}
}

- 이러한 설계 만으로도 결합도를 충분히 낮출 수 있다.