IRONSOFTWAREHOME
개발자 업데이트

C# Virtual 키워드 (개발자를 위한 작동 원리)

제이콥 멜러, 팀 아이언 최고기술책임자
Jacob Mellor
Updated: 2026년 4월 23일

C#에서 virtual 키워드는 폴리모피즘을 촉진하며, 개발자가 파생 클래스에서 메서드를 재정의할 수 있도록 하는 중요한 개념입니다. 이 키워드는 클래스 메서드, 속성, 이벤트에 적용될 때, 해당 엔티티가 파생 클래스에서 override 키워드를 사용하여 그 동작을 수정할 수 있음을 나타냅니다. 이 튜토리얼에서 우리는 C# Virtual Keyword에 대해 배우고 IronPDF 라이브러리를 탐험할 것입니다. 어떻게 작동하는지 바로 살펴보고, 실용적인 예제로 그것을 볼 수 있습니다.

작동 중인 가상 메서드

가상 키워드의 기본 사용

기본적으로, 가상 메서드는 파생 클래스가 기반 클래스에서 이미 정의된 메서드에 대한 특정 구현을 제공할 수 있도록 하는 기반 클래스 메서드입니다.

C#에서 virtual 키워드는 메서드, 속성 또는 이벤트에 대해 의사 신호를 하여 해당 메서드를 상속하는 모든 클래스에서 재정의할 수 있음을 나타냅니다. 다음 예에서 기반 클래스 Shape를 정의하고 가상 메서드 **Area:**를 사용하는 것을 고려해 보십시오:

public class Shape
{
    public virtual double Area()
    {
        return 0; // Default implementation, returns 0
    }
}

가상 메서드 재정의

파생 클래스는 이러한 가상 메서드를 재정의하여 파생 클래스의 특정 요구 사항에 맞도록 자체 구현을 제공할 수 있습니다. override 키워드를 사용하여, Circle 클래스가 Shape에서 상속하고 Area 메서드의 자체 버전을 제공하도록 합시다:

public class Circle : Shape
{
    public double Radius { get; set; }
    
    public Circle(double radius)
    {
        Radius = radius;
    }

    public override double Area()
    {
        // Own implementation for circle area
        return Math.PI * Radius * Radius; 
    }
}

위의 코드에서, Circle 클래스는 원의 면적을 계산하는 Area 메서드의 특정 구현을 제공합니다. 이것은 폴리모피즘에서 가상 메서드의 힘을 보여줍니다.

비가상 메서드

모든 메서드를 가상으로 만들어야 하거나 가상으로 해야 할 필요가 없다는 것을 인식하는 것이 중요합니다. 비 가상 메서드는 파생 클래스에서 재정의할 수 없도록 정의되므로, 초기 구현이 변경되지 않고 상속하는 모든 클래스에 사용됩니다. 기본 클래스가 수정되어서는 안 되는 표준 구현을 제공할 때 유용합니다.

실용적인 응용

실제 시나리오에서 이러한 개념을 실제로 적용해 봅시다. 다음 프로그램은 ShapeCircle 클래스를 사용하는 것을 고려해 보십시오:

public class Program
{
    public static void Main(string[] args)
    {
        Shape myShape = new Shape();
        Shape myCircle = new Circle(5);

        // Display the area calculation of the default and overridden methods.
        Console.WriteLine($"Shape area: {myShape.Area()}");
        Console.WriteLine($"Circle area: {myCircle.Area()}");
    }
}

위의 예제 프로그램은 폴리모피즘을 실행 중에 보여주고 가상 함수의 핵심을 보여줍니다. 비록 myCircleShape로 선언되었지만, 그것은 Circle 클래스에서 재정의된 Area 메서드를 호출하며, 가상 및 override 키워드가 가능하게 하는 역동적인 디스패치 메커니즘을 보여줍니다.

C# Virtual Keyword (개발자를 위한 작동 방식): 그림 1 - 위의 코드에서 myCircle이 재정의된 Area 메서드를 호출하는 방법을 보여주는 콘솔 출력

Virtual 및 Override 키워드의 고급 사용

추상 메서드 및 클래스

추상 메서드는 한 단계 더 나아가 추상 클래스에서 사용됩니다. 추상 메서드는 구현 없이 기본 클래스에서 선언된 메서드이며, 파생 클래스에서 재정의해야 합니다. 이것은 일관된 인터페이스를 보장하면서 각 파생 클래스에 맞춤형 동작을 허용하기 위해 파생 클래스가 추상 메서드에 대한 구현을 제공하도록 강제합니다.

메서드 오버로딩 대 오버라이딩

메서드 오버로딩과 메서드 오버라이딩의 차이를 이해하는 것도 중요합니다. 메서드 오버로딩은 동일한 클래스 내에서 발생하며, 같은 이름을 가지지만 다른 매개변수를 가진 여러 메서드를 허용합니다. 메서드 오버라이딩은 virtual과 override 키워드를 통해 제공되며, 파생 클래스가 기본 클래스에서 정의된 메서드에 대해 다른 구현을 제공할 수 있게 합니다.

가상 속성과 이벤트

메서드 외에도 속성과 이벤트도 가상으로 만들 수 있습니다. 이를 통해 파생 클래스는 맞춤 getter, setter 및 이벤트 핸들러를 제공하여 클래스 계층 구조의 유연성을 더욱 높일 수 있습니다.

IronPDF: .NET PDF 라이브러리

IronPDF는 C# 개발자가 .NET 애플리케이션 내에서 PDF 문서를 생성, 조작 및 렌더링할 수 있도록 설계된 포괄적인 라이브러리입니다. HTML을 사용하여 PDF를 생성하는 것과 같은 PDF 파일 작업을 단순화하는 직관적인 API를 제공하여 개발자가 복잡한 PDF 문서 구조를 이해하거나 외부 소프트웨어를 사용할 필요 없이 PDF를 생성, 편집, 변환할 수 있습니다. IronPDF는 랭귀지의 객체 지향 기능과 원활하게 통합되어 가상 키워드 사용을 포함한 맞춤형 PDF 처리 기능을 제공합니다.

IronPDF와 함께 가상 키워드를 사용하면 개발자가 자신의 애플리케이션 내에서 IronPDF 클래스의 기능을 확장할 수 있습니다. PDF 생성 또는 조작과 관련된 가상 메서드를 사용하여 기본 클래스를 정의함으로써, 개발자는 이러한 메서드를 재정의하여 특정 요구에 맞게 PDF 처리 동작을 맞춤화할 수 있는 파생 클래스를 만들 수 있습니다.

예: 가상 메서드를 사용하여 PDF 렌더링 사용자 지정

IronPDF를 사용하여 HTML 문자열에서 PDF를 렌더링하는 기본 클래스가 있다고 가정해 보겠습니다. 렌더링 메서드를 가상으로 표시함으로써 파생 클래스가 렌더링 프로세스를 수정하거나 향상시킬 수 있습니다. 다음은 간단한 예입니다.

public class BasicPdfRenderer
{
    // Virtual method allowing customization in derived classes
    public virtual byte[] RenderHtmlToPdf(string htmlContent)
    {
        // Use IronPDF to render PDF from HTML
        var renderer = new IronPdf.ChromePdfRenderer();
        var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
        return pdfDocument.BinaryData;
    }
}

public class CustomPdfRenderer : BasicPdfRenderer
{
    // Overriding the base class method to implement custom rendering settings
    public override byte[] RenderHtmlToPdf(string htmlContent)
    {
        var renderer = new IronPdf.ChromePdfRenderer();
        var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);

        // Apply a prominent watermark to the PDF document
        pdfDocument.ApplyWatermark("<h2 style='color:red; font-size: 60px; opacity: 0.5; text-shadow: 2px 2px 5px grey;'>SAMPLE</h2>",
                                   30,
                                   IronPdf.Editing.VerticalAlignment.Middle,
                                   IronPdf.Editing.HorizontalAlignment.Center);

        // Return the binary data of the PDF document
        return pdfDocument.BinaryData;
    }
}

class Program
{
    static void Main(string[] args)
    {
        License.LicenseKey = "License-Key";

        // HTML content to be converted to PDF
        string htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a simple PDF document generated from HTML.</p>";
        
        // Create an instance of CustomPdfRenderer
        CustomPdfRenderer renderer = new CustomPdfRenderer();
        
        // Call RenderHtmlToPdf method to generate PDF binary data
        byte[] pdfData = renderer.RenderHtmlToPdf(htmlContent);
        
        // Specify the file path to save the PDF
        string filePath = "f:\\CustomRenderedPdf.pdf";
        
        // Save the binary data to a file
        File.WriteAllBytes(filePath, pdfData);
        
        // Output success message
        Console.WriteLine($"PDF generated and saved to {filePath}");
    }
}

우리는 HTML을 PDF로 변환하기 위해 BasicPdfRenderer 클래스 내에서 IronPDF를 활용하여 RenderHtmlToPdf 메서드를 가상으로 표시하여 사용자 지정을 허용합니다. BasicPdfRenderer에서 파생된 CustomPdfRenderer 클래스는 메서드를 재정의하여 변환을 수행할 뿐만 아니라 생성된 PDF 전체에 독특하고 큰 빨간색 워터마크를 삽입합니다.

출력 PDF 파일

다음은 IronPDF로 생성된 PDF 파일입니다:

C# Virtual Keyword (개발자를 위한 작동 방식): 그림 2 - CustomPdfRendered의 가상 메서드 RenderHtmlToPDF를 활용한 변환 예제 코드 출력

결론

C#의 가상 키워드는 객체 지향 프로그래밍의 기초로 다형성과 동적 디스패치를 가능하게 합니다. 이는 파생 클래스가 기본 클래스에서 정의된 메서드, 속성 및 이벤트의 특정 구현을 제공하여 개발자가 유연하고 재사용 가능한 코드 구조를 만들 수 있게 합니다. 가상 메서드, 재정의 메커니즘, 클래스 계층 구조 간의 관계를 이해하고 실용적인 예제를 통해 개발자는 이러한 개념을 효과적으로 활용하여 견고한 애플리케이션을 구축할 수 있습니다. 또한, 이러한 개념은 개발자가 애플리케이션에서 IronPDF를 보다 효율적으로 사용할 수 있게 도와줍니다. 무료 체험판 옵션을 사용하여 IronPDF를 비용 없이 테스트할 수 있습니다.

제이콥 멜러, 팀 아이언 최고기술책임자
최고기술책임자

제이콥 멜러는 Iron Software의 최고 기술 책임자(CTO)이자 C# PDF 기술을 개척한 선구적인 엔지니어입니다. Iron Software의 핵심 코드베이스를 최초로 개발한 그는 창립 초기부터 회사의 제품 아키텍처를 설계해 왔으며, CEO인 캐머런 리밍턴과 함께 회사를 NASA, 테슬라, 그리고 전 세계 정부 기관에 서비스를 제공하는 50명 이상의 직원을 보유한 기업으로 성장시켰습니다.

...
더 읽어보기

관련 기사

Key in blue circle

무료 30일 체험 키를 즉시 받으세요.

Your trial license will be sent to your email address

제한 없음. 100% 무제한 이용. 신용카드 불필요.

bullet_checked신용카드나 계정 생성은 필요하지 않습니다.제한 없음. 100% 무제한 이용. 신용카드 불필요.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
무료 라이브 데모를 예약하세요
Booking Badge

전 세계 수백만 엔지니어들이 신뢰하는 제품입니다.

Iron Software의 고객 로고
부담 없는 무료 상담을 받아보세요
아래 양식을 작성하시거나 sales@ironsoftware.com으로 이메일을 보내주세요.
고객님의 정보는 항상 비밀로 유지됩니다.
전 세계 수백만 엔지니어들이 신뢰하는 제품입니다.
Iron Software의 고객 로고
지금 바로 30일 무료 체험판 키를 받으세요.
신용카드나 계정 생성은 필요하지 않습니다.