의존관계 역전 원칙(Dependency inversion principle)
- 소프트웨어 모듈들을 분리하는 특정 형식
- 상위(High-Level) 모듈은 하위(Low-Level) 모듈의 것을 직접 가져오면 안됨
- 둘 다 추상화(abstraction)에 의존해야 함
- 추상화는 세부 사항에 의존해서는 안됨.
- 세부사항이 추상화에 의존해야 함.
- 클래스가 다른 클래스와 관계가 있으면 안됨
- 클래스가 다른 클래스의 작동 방식을 많이 알고 있으면 안됨
- 종속성(dependency)또는 결합(coupling) 발생
- 종속성은 어느 잠재적인 위험
public class Switch : MonoBehaviour
{
public Door door;
public bool isActivated;
public void Toggle()
{
if (isActivated)
{
isActivated = false;
door.Close();
}
else
{
isActivated = true;
door.Open();
}
}
}
public class Door : MonoBehaviour
{
public void Open() {}
public void Close() {}
}
이제 이 코드를 개선해보자
public interface ISwitchable
{
public bool IsActive { get; }
public void Activate();
public void Deactivate();
}
public class Door : MonoBehaviour, ISwitchable
{
private bool isActive;
public bool IsActive => isActive;
public void Activate()
{
isActive => true;
}
public void Deactivate()
{
isActive = false;
}
}
public class Switch : MonoBehaviour
{
public ISwitchable client;
public void Toggle()
{
if (client.IsActive)
{
client.Deactivate();
}
else
{
client.Activate();
}
}
}