virtual/override/sealed, 추상 클래스
virtual 메서드, 재정의, 재정의 봉인, 추상 클래스를 배우고, 기본 클래스 참조가 파생 클래스의 구현을 디스패치하는 방식을 살펴봅니다.
virtual/override/sealed, 추상 클래스은(는) CoddyKit의 무료 C# Academy 강의입니다. 이것은 3개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C# Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C# Academy 강의에는 총 3개의 강의가 포함되어 있습니다.
상속 기초
목표: 상속을 통해 동작을 재사용하고 사용자 지정합니다.
- 기반 클래스의 virtual
- 파생 클래스의 override
- 추가 변경을 막는 sealed override
- abstract class는 계약과 공유 코드를 정의합니다
virtual과 override
virtual은 재정의를 가능하게 합니다. 기반 reference를 통한 호출은 파생 클래스의 override를 사용합니다(동적 디스패치).
using System;
// Base method is virtual so derived classes can customize it
public class Shape
{
public virtual double Area()
{
return 0.0; // default
}
}
public class Rectangle : Shape
{
public int Width { get; private set; }
public int Height { get; private set; }
public Rectangle(int w, int h)
{
Width = w; Height = h;
}
public override double Area()
{
return Width * Height;
}
}
public class Program
{
public static void Main(string[] args)
{
Shape s = new Shape();
Shape r = new Rectangle(3, 4); // base reference
Console.WriteLine("Shape area = " + s.Area());
Console.WriteLine("Rectangle area = " + r.Area()); // calls Rectangle.Area()
}
}
sealed override
sealed override를 사용하여 상속 계층의 특정 수준에서 메서드를 고정합니다.
using System;
public class BaseLogger
{
public virtual string Prefix()
{
return "[LOG]";
}
}
public class ConsoleLogger : BaseLogger
{
public sealed override string Prefix()
{
return "[CONSOLE]";
}
}
// Further derived class cannot override Prefix again:
// public class FancyLogger : ConsoleLogger
// {
// public override string Prefix() { return "[FANCY]"; } // compile error
// }
public class Program
{
public static void Main(string[] args)
{
ConsoleLogger log = new ConsoleLogger();
Console.WriteLine(log.Prefix() + " Ready");
}
}
추상 클래스
추상 클래스는 필수 멤버(abstract)를 정의하며 공유 코드도 제공할 수 있습니다.
using System;
// Abstract class: cannot be instantiated; must implement abstract members
public abstract class Animal
{
public abstract string Speak(); // no body here
public string Info()
{
return "Animal says: " + Speak(); // shared code uses the abstract member
}
}
public class Dog : Animal
{
public override string Speak()
{
return "Woof";
}
}
public class Program
{
public static void Main(string[] args)
{
// Animal a = new Animal(); // compile error: abstract
Animal d = new Dog();
Console.WriteLine(d.Info()); // calls Dog.Speak()
}
}
virtual과 abstract 비교
선택 기준:
- virtual: 파생 형식이 재정의할 수 있는 기본 본문을 제공합니다.
- abstract: 본문이 없으며 파생 형식이 반드시 구현해야 합니다.
- sealed override: 동작이 확정된 후 추가 재정의를 막습니다.
다형성 호출
다형성이란 메서드가 기반 형식을 받고 파생 인스턴스에서 재정의된 멤버를 호출하는 것입니다.
using System;
public class Notifier
{
public virtual string Channel() { return "Base"; }
}
public class EmailNotifier : Notifier
{
public override string Channel() { return "Email"; }
}
public class SmsNotifier : Notifier
{
public override string Channel() { return "SMS"; }
}
public class Program
{
// Works with any Notifier (polymorphism)
static void Send(Notifier n, string msg)
{
Console.WriteLine("[" + n.Channel() + "] " + msg);
}
public static void Main(string[] args)
{
Send(new EmailNotifier(), "Hello");
Send(new SmsNotifier(), "Hi");
}
}
virtual/override/sealed 규칙
복습
복습: 기반 메서드에 virtual을 표시하고 파생 형식에서 override하며, 동작을 고정하려면 sealed override를 사용합니다. 공통 코드를 공유하면서 구현을 요구하려면 추상 클래스를 사용합니다.
자주 묻는 질문
“virtual/override/sealed, 추상 클래스” 강의는 무료인가요?
네 — “virtual/override/sealed, 추상 클래스” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C# Academy 강의 전체를 잠금 해제할 수 있습니다. C# Academy 강의에는 총 3개의 강의가 포함되어 있습니다.
“virtual/override/sealed, 추상 클래스”에서 뭘 배우나요?
virtual 메서드, 재정의, 재정의 봉인, 추상 클래스를 배우고, 기본 클래스 참조가 파생 클래스의 구현을 디스패치하는 방식을 살펴봅니다. 브라우저에서 직접 실행하는 실습 코드로 C# Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
C# Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 C# Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 3개 중 1번째 강의입니다.
“virtual/override/sealed, 추상 클래스” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 C# Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 C# Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- virtual/override/sealed, 추상 클래스
- 인터페이스(입문)와 다중 인터페이스 구현
- 다형성과 동적 디스패치