C# 추상 클래스란? abstract와 interface 차이, override 예제로 이해하기
C# 추상 클래스( abstract class )는 공통 코드와 상태를 한곳에 두면서, 파생 클래스가 반드시 구현해야 할 동작까지 정하고 싶을 때 사용해요. 서로 관련 없는 형식에 같은 기능 계약만 붙이려면 interface 가 알맞고, 같은 계열의 클래스가 생성자·필드·기본 구현을 공유해야 한다면 추상 클래스가 더 자연스럽습니다. 먼저 답부터 정리하면 abstract 클래스는 직접 new 할 수 없습니다. 대신 파생 클래스가 공통 구현은 물려받고, 구현이 비어 있는 추상 멤버는 override 로 완성합니다. 공통 기반과 구현 강제가 동시에 필요할 때 쓰는 도구라고 생각하면 이해가 쉬워요. C# abstract는 무엇을 막고 무엇을 허용할까요? 클래스 선언 앞에 abstract 를 붙이면 그 클래스는 불완전한 기반 형식이 됩니다. 따라서 new ReportExporter() 처럼 직접 객체를 만들 수는 없어요. 그렇다고 내용이 비어 있는 것은 아닙니다. 생성자, 필드, 속성, 일반 메서드, 가상 메서드를 가질 수 있고, 본문이 없는 추상 메서드나 추상 속성도 함께 선언할 수 있습니다. 기존 글에 사용했던 추상 클래스 선언 문법 화면입니다. 추상 멤버를 물려받은 구체 클래스는 해당 멤버를 모두 구현해야 합니다. 하나라도 구현하지 않으면 그 파생 클래스 역시 abstract 로 선언해야 해요. 이 규칙 덕분에 “이 계열의 클래스라면 내보내기 기능을 반드시 제공해야 한다” 같은 설계 의도를 컴파일 단계에서 지킬 수 있습니다. 실행 가능한 예제로 흐름을 확인해 볼게요 보고서를 파일로 내보내는 기능을 예로 들어보겠습니다. 파일 이름과 로그 출력은 모든 내보내기 클래스가 공유하지만, 실제 변환 방식은 PDF와 CSV가 서로 다릅니다. 이때 공통 부분은 기반 클래스에 구현하고, 달라지는 부분만 추상 메서드로 남겨 둘 수 있어요. using System; public abstract class ReportExporte...