0Pricing
C# Academy · 강의

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 규칙

빠르게 확인해 보겠습니다. C#에서 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. virtual/override/sealed, 추상 클래스
  2. 인터페이스(입문)와 다중 인터페이스 구현
  3. 다형성과 동적 디스패치
← C# Academy(으)로 돌아가기