추상화 클래스는 하나 이상의 추상화 메서드 또는 클래스를 정의하는 것을 강제하도록 하고자 할 때 사용됩니다. 저도 개인적으로 간간히 사용하고 있고 닷넷 코어나 수많은 라이브러리에서도 쉽게 이것을 볼 수 있습니다.
그런데 만약 추상화된 클래스를 한번 더 추상화 하고 싶을 땐 어떻게 하면 될까요?
여기 일반적인 추상 클래스가 있습니다.
public abstract class ApplicationBase : Application
{
protected abastract Window CreateShell();
}
또 추상 클래스를 선언하면 됩니다.
public abstract class SmartApplication : ApplicationBase
{
}
그리고 추상 클래스에서는 부모의 추상 메서드를 바로 구현하지 않아도 됩니다. 이런 경우 아래처럼 다음으로 상속을 받는 DotnetApplication에서 최종적으로 추상 메서드를 구현하면 됩니다.
public class App : SmartApplication
{
protected override Window CreateShell()
{
return new MainWindow();
}
}
그런데 여기서 만약 WpfApplication에서 추상 메서드를 먼저 구현하면 어떻게 될까요? 실제로 가능합니다.
public abstract class SmartApplication : ApplicationBase
{
protected override Window CreateShell()
{
return new Window();
}
}
이렇게 앞에서 추상 메서드가 구현된다면 App에서는 더이상 CreateShell() 추상 메서드를 구현하는 것이 반드시 해야 할 의무가 아니게 됩니다.
public class App : SmartApplication
{
// 신기하게도 추상메서드를 구현하지 않고도 에러가 발생하지 않죠.
}
물론 추상 메서드를 구현한다고 해도 문제 될 것은 없습니다. 단지 SmartApplication에서 구현한 추상 메서드 자체가 없는 것이나 마찬가지인 것 처럼 동작할 것입니다.
읽어주셔서 감사합니다.