객체지향 설계의 핵심인 인터페이스(Interface)와 추상 클래스(Abstract Class)의 차이점과 활용법을 정리했다.
추상 클래스: 구조적 기반 정의
추상 클래스는 상속 관계를 명확히 하고 공통 로직을 공유할 때 사용한다.
클래스의 기본 골격을 정의하는 역할을 수행한다.
abstract class Machine {
public void PowerOn() => Console.WriteLine("전원 활성화");
public abstract void Work(); // 자식 클래스에서 구현 강제
}
인터페이스: 기능적 약속 정의
인터페이스는 클래스 계층과 무관하게 공통 기능을 정의한다.
다중 구현을 지원하여 설계 유연성을 제공한다.
interface IPrintable { void Print(); }
// 추상 클래스로 골격을 정의하고 인터페이스로 기능을 확장
class SmartPrinter : Machine, IPrintable {
public override void Work() => Console.WriteLine("장치 가동 중");
public void Print() => Console.WriteLine("출력 완료");
}
설계 전략
추상 클래스를 통해 구조적 기반을 확보하고 인터페이스를 통해 기능을 확장하는 방식은 효율적이다.
시스템 요구사항에 따라 두 도구를 적절히 조합하여 확장성 있는 소프트웨어를 설계해야 하는 것 같다.