공부/SOLID

Dependency Inversion Principle(의존성 역전 원칙)

ironk.im 2021. 9. 21. 01:05
반응형

Dependency Inversion Principle은 의존성 역전의 원칙이라고 한다.

해당 부분은 이해하기 어려울 수 도 있는데,

고수준의 모듈이 저수준의 모듈에 의존하지 않도록 인터페이스나 추상클래스에 의존하도록 하는 것을 말한다.

우선 Dependency Inversion Principle을 준수하지 않은 경우에 대한 예제를 보자

public class Led {
	public void on() {
		System.out.println("LED on");
	}

	public void off() {
		System.out.println("LED off");
	}
}

public class Switch {
	private Led led;
	private boolean isOn;
	
	public Switch(Led led) {
		this.led = led;
		this.isOn = false;
	}

	public void operate() {
		if (isOn) {
			led.off();
		} else {
			led.on();
		}
	}
}

위 코드의 Switch는 Led 타입의 변수를 가지고 있다.

이는 Switch 클래스가 Led에 의존성을 가진다고 볼 수 있다.

이 경우 Switch클래스의 전구는 Led외에는 사용할 수 없게 된다는 문제가 발생 한다.

 

이번에는 Dependency Inversion Principle을 준수하는 예를 보자

interface Light {
	void on();
	void off();
}

public class Led implements Light {
	public void on() {
		System.out.println("LED on");
	}

	public void off() {
		System.out.println("LED off");
	}
}

public class Switch {
	private Light light;
	private boolean isOn;
	
	public Switch(Light light) {
		this.light = light;
		this.isOn = false;
	}

	public void operate() {
		if (isOn) {
			light.off();
		} else {
			light.on();
		}
	}
}

위 경우는 Switch가 하위 클래스에 대한 의존성을 갖는 것이 아닌 인터페이스에 대한 의존성을 갖고 있다.

이 이야기는 인터페이스를 구현하는 하위 클래스를 사용할 수 있다는 이야기가 되며, 이를 통해 하나의 타입에 대한 의존성 문제를 해결할 수 있다.

즉, Dependency Inversion Principle은 하나의 클래스에 대해 의존성이 발생하지 않도록 하는 원칙이다.

반응형