푸터 콘텐츠로 바로가기
.NET 도움말

C# Const (개발자를 위한 작동 방식)

C#에서 const 키워드는 컴파일 타임에 알려진 상수 필드 또는 값을 정의하는 강력한 도구입니다. 이러한 값은 불변이며, 설정된 후 프로그램 전체에서 값이 변경될 수 없습니다. const를 활용하면 일정하게 유지되어야 하는 값의 명확한 표시를 제공하여 코드의 가독성과 유지보수성을 높일 수 있습니다. 이 기사에서는 const 키워드와 IronPDF 라이브러리에 대해 논의할 것입니다.

상수 변수 선언

상수 변수를 선언하려면 const 키워드 뒤에 데이터 유형을 사용하고 즉시 초기화해야 합니다. 예를 들어, const int myConstValue = 100;는 정수 상수를 정의합니다. 상수 변수는 선언될 때 초기화되어야 하며, 이는 컴파일 타임에 의미되며 프로그램이 실행되기 전에 완전히 평가되어야 한다는 점을 주의해야 합니다.

public class Program
{
    public const int MaxSize = 10;

    static void Main(string[] args)
    {
        Console.WriteLine(MaxSize);
    }
}
public class Program
{
    public const int MaxSize = 10;

    static void Main(string[] args)
    {
        Console.WriteLine(MaxSize);
    }
}
Public Class Program
	Public Const MaxSize As Integer = 10

	Shared Sub Main(ByVal args() As String)
		Console.WriteLine(MaxSize)
	End Sub
End Class
$vbLabelText   $csharpLabel

C# Const (개발자를 위한 작동 방식): 그림 1 - Const 출력 Csharp Const 1 related to 상수 변수 선언

이 예는 클래스 내에서 const int 상수 정수를 간단하게 사용하는 방법을 설명합니다. MaxSize 상수는 동일한 클래스 내에서 액세스할 수 있으며 static void Main 메서드에서 직접 사용할 수 있습니다.

const 대 readonly 변수

constreadonly 키워드는 모두 불변 값을 선언하는 데 사용되지만, 그들 간에는 중요한 차이점이 있습니다. const 필드는 컴파일 타임 상수로, 값이 컴파일 타임에 결정되어 Intermediate Language (IL) 코드에 직접 삽입됩니다. 이는 정적이며 수정할 수 없습니다.

반면에 readonly 변수는 선언 시 또는 클래스의 생성자 내에서 할당할 수 있습니다. 이는 다소 유연성을 제공하며, readonly 필드는 클래스 인스턴스를 생성하는 데 사용된 생성자에 따라 다른 값을 가질 수 있습니다.

public class Program
{
    public const string ConstExample = "Constant"; // const string
    public readonly string ReadonlyExample;

    public Program()
    {
        ReadonlyExample = "Initialized at runtime";
    }

    static void Main(string[] args)
    {
        Program p = new Program();
        Console.WriteLine(ConstExample);
        Console.WriteLine(p.ReadonlyExample);
    }
}
public class Program
{
    public const string ConstExample = "Constant"; // const string
    public readonly string ReadonlyExample;

    public Program()
    {
        ReadonlyExample = "Initialized at runtime";
    }

    static void Main(string[] args)
    {
        Program p = new Program();
        Console.WriteLine(ConstExample);
        Console.WriteLine(p.ReadonlyExample);
    }
}
Public Class Program
	Public Const ConstExample As String = "Constant" ' const string
	Public ReadOnly ReadonlyExample As String

	Public Sub New()
		ReadonlyExample = "Initialized at runtime"
	End Sub

	Shared Sub Main(ByVal args() As String)
		Dim p As New Program()
		Console.WriteLine(ConstExample)
		Console.WriteLine(p.ReadonlyExample)
	End Sub
End Class
$vbLabelText   $csharpLabel

C# Const (개발자를 위한 작동 방식): 그림 2 - Readonly 필드 출력 Csharp Const 2 related to const 대 readonly 변수

const 변수의 범위

상수 변수는 메서드 내에서 또는 클래스의 멤버로 선언될 수 있습니다. const 변수를 메서드 내에서 선언하면, 이는 로컬 상수로 알려져 있습니다. 로컬 상수는 선언된 메서드 내에서만 액세스할 수 있습니다.

public class Program
{
    static void DemoMethod()
    {
        const int LocalConst = 5; // local constant
        Console.WriteLine(LocalConst);
    }
}
public class Program
{
    static void DemoMethod()
    {
        const int LocalConst = 5; // local constant
        Console.WriteLine(LocalConst);
    }
}
Public Class Program
	Private Shared Sub DemoMethod()
		Const LocalConst As Integer = 5 ' local constant
		Console.WriteLine(LocalConst)
	End Sub
End Class
$vbLabelText   $csharpLabel

C# Const (개발자를 위한 작동 방식): 그림 3 - 로컬 상수 출력 Csharp Const 3 related to const 변수의 범위

반대로 const가 클래스 내에서 선언되고 메서드 외부에 있을 때, 이는 동일한 클래스의 모든 정적 기능에서 액세스할 수 있습니다. 왜냐하면 const 필드는 암시적으로 정적이기 때문입니다. 그러나 클래스 이름을 통해 참조하지 않고 인스턴스 메서드에서 const 필드에 액세스하려고 하면 컴파일 오류가 발생합니다.

컴파일 타임 상수 대 런타임 상수

const 값의 주요 특징은 컴파일 타임에 평가된다는 것입니다. 즉, const 필드의 값은 컴파일러에 의해 알려지고 완전히 평가되어야 합니다. 이는 런타임에 평가되는 변수와는 대조적이며, 이러한 변수의 값은 프로그램 실행 중에 결정됩니다.

예를 들어, 런타임에 수행된 계산에 기반하여 const 필드에 값을 할당하려고 하면 컴파일 타임 오류가 발생합니다. 컴파일러는 const 값을 컴파일 타임에 알려진 상수 표현식 또는 리터럴 값에서 할당받아야 합니다.

const double Pi = Math.PI; // This will cause a compile time error
const double Pi = Math.PI; // This will cause a compile time error
Const Pi As Double = Math.PI ' This will cause a compile time error
$vbLabelText   $csharpLabel

C#에서 상수와 정적 멤버의 고급 활용

C#에서 constreadonly의 기본을 넘어, 상수 표현식, 정적 생성자, 정적 필드와 작업하는 방법을 이해하면 특히 클래스 인스턴스 간에 공유되어야 하는 상수 값을 다룰 때 코딩 실습을 높일 수 있습니다.

상수 표현식

C#에서 상수 표현식은 컴파일 타임에 완전히 평가될 수 있는 표현식입니다. 따라서 const 변수를 선언할 때, 선언의 오른편은 상수 표현식이어야 합니다. 이는 const 값이 고정되어 있고 컴파일된 코드에 직접 삽입될 수 있도록 해서 매우 최적화되고 효율적인 응용 프로그램으로 이어집니다.

public class Calculator
{
    public const int Multiplier = 2;
    public const int DoubleMultiplier = Multiplier * 2; // Constant expression
}
public class Calculator
{
    public const int Multiplier = 2;
    public const int DoubleMultiplier = Multiplier * 2; // Constant expression
}
Public Class Calculator
	Public Const Multiplier As Integer = 2
	Public Const DoubleMultiplier As Integer = Multiplier * 2 ' Constant expression
End Class
$vbLabelText   $csharpLabel

이 예에서, DoubleMultiplier는 다른 상수 값을 사용하여 계산되므로 컴파일 타임 상수가 될 자격이 있는 상수 표현식입니다.

정적 생성자

C#의 정적 생성자는 클래스의 정적 필드를 초기화하는 특별한 생성자입니다. 이는 첫 번째 인스턴스가 생성되기 전이나 정적 멤버가 참조되기 전에 자동으로 호출됩니다. 정적 생성자는 정적 데이터의 복잡한 초기화나 유형당 한 번만 발생해야 하는 작업을 수행하는 데 유용합니다.

public class Program
{
    public static readonly string StartTime;

    static Program()
    {
        StartTime = DateTime.Now.ToString("T");
    }

    public static void DisplayStartTime()
    {
        Console.WriteLine($"Program started at: {StartTime}");
    }
}
public class Program
{
    public static readonly string StartTime;

    static Program()
    {
        StartTime = DateTime.Now.ToString("T");
    }

    public static void DisplayStartTime()
    {
        Console.WriteLine($"Program started at: {StartTime}");
    }
}
Public Class Program
	Public Shared ReadOnly StartTime As String

	Shared Sub New()
		StartTime = DateTime.Now.ToString("T")
	End Sub

	Public Shared Sub DisplayStartTime()
		Console.WriteLine($"Program started at: {StartTime}")
	End Sub
End Class
$vbLabelText   $csharpLabel

정적 생성자는 StartTime 필드를 현재 시간으로 초기화합니다. 이 값은 DisplayStartTime 정적 메서드를 통해 액세스할 수 있으며, 정적 생성자는 런타임까지 알려지지 않는 값으로 readonly 필드를 초기화하는 데 사용할 수 있음을 보여줍니다.

정적 필드와 readonly 및 static 키워드

정적 필드는 클래스의 인스턴스가 아닌 클래스에 속하며 static 키워드를 사용하여 선언됩니다. readonly 키워드와 결합될 때, 정적 필드는 선언 시 또는 정적 생성자 내에서 초기화될 수 있으며 이후에는 수정할 수 없습니다.

public class Configuration
{
    public static readonly int MaxUsers;
    public const int TimeoutSeconds = 30;

    static Configuration()
    {
        MaxUsers = FetchMaxUsersFromConfig();
    }

    private static int FetchMaxUsersFromConfig()
    {
        // Imagine this method reads from a configuration file
        return 100;
    }
}
public class Configuration
{
    public static readonly int MaxUsers;
    public const int TimeoutSeconds = 30;

    static Configuration()
    {
        MaxUsers = FetchMaxUsersFromConfig();
    }

    private static int FetchMaxUsersFromConfig()
    {
        // Imagine this method reads from a configuration file
        return 100;
    }
}
Public Class Configuration
	Public Shared ReadOnly MaxUsers As Integer
	Public Const TimeoutSeconds As Integer = 30

	Shared Sub New()
		MaxUsers = FetchMaxUsersFromConfig()
	End Sub

	Private Shared Function FetchMaxUsersFromConfig() As Integer
		' Imagine this method reads from a configuration file
		Return 100
	End Function
End Class
$vbLabelText   $csharpLabel

이 예는 런타임에, 아마도 구성 파일에서 값을 검색하여 readonly 정적 필드 MaxUsers를 초기화하는 정적 작성자의 사용을 보여줍니다. const 필드인 TimeoutSeconds는 코드에 직접 포함된 컴파일 타임 상수를 나타냅니다.

IronPDF 소개

C# Const (개발자를 위한 작동 방식): 그림 4 - IronPDF Csharp Const 4 related to IronPDF 소개

IronPDF는 개발자가 .NET 애플리케이션에서 PDF 문서를 생성, 편집 및 읽을 수 있게 하는 다용도의 라이브러리입니다. 이 강력한 도구는 개발자가 HTML을 PDF로 변환, 콘텐츠를 조작하고 PDF 파일에서 데이터를 쉽게 추출할 수 있게 하여 PDF 생성을 간소화합니다.

IronPDF의 강점은 HTML을 PDF로 변환하여 레이아웃과 스타일을 모두 보존하는 것에 있습니다. 웹 콘텐츠에서 PDF를 생성하는 데 이상적인 도구로, 보고서, 송장 및 문서화와 같은 것들을 포함합니다. HTML 파일, URL 및 HTML 문자열은 쉽게 PDF 파일로 변환될 수 있습니다.

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' 1. Convert HTML String to PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert HTML File to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF 및 const 예제 시작하기

.NET 프로젝트에 IronPDF를 통합하는 방법을 보여주기 위해, 변환하고자 하는 HTML 문자열을 정의하는 상수를 사용하는 간단한 예제를 살펴보겠습니다.

using IronPdf;

public class PdfGenerator
{
    // Defining a constant HTML template
    public const string HtmlTemplate = @"
        <html>
            <head>
                <title>PDF Report</title>
            </head>
            <body>
                <h1>IronPDF Report</h1>
                <p>This is a simple PDF document generated from HTML string using IronPDF.</p>
            </body>
        </html>";

    public static void CreatePdf(string filePath)
    {
        IronPdf.License.LicenseKey = "License";

        // Create a new PDF document from HTML template
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(HtmlTemplate);

        // Save the PDF document to a file
        pdf.SaveAs(filePath);
        Console.WriteLine($"PDF generated successfully at {filePath}");
    }
}

class Program
{
    static void Main(string[] args)
    {
        PdfGenerator.CreatePdf("example.pdf");
    }
}
using IronPdf;

public class PdfGenerator
{
    // Defining a constant HTML template
    public const string HtmlTemplate = @"
        <html>
            <head>
                <title>PDF Report</title>
            </head>
            <body>
                <h1>IronPDF Report</h1>
                <p>This is a simple PDF document generated from HTML string using IronPDF.</p>
            </body>
        </html>";

    public static void CreatePdf(string filePath)
    {
        IronPdf.License.LicenseKey = "License";

        // Create a new PDF document from HTML template
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(HtmlTemplate);

        // Save the PDF document to a file
        pdf.SaveAs(filePath);
        Console.WriteLine($"PDF generated successfully at {filePath}");
    }
}

class Program
{
    static void Main(string[] args)
    {
        PdfGenerator.CreatePdf("example.pdf");
    }
}
Imports IronPdf

Public Class PdfGenerator
	' Defining a constant HTML template
	Public Const HtmlTemplate As String = "
        <html>
            <head>
                <title>PDF Report</title>
            </head>
            <body>
                <h1>IronPDF Report</h1>
                <p>This is a simple PDF document generated from HTML string using IronPDF.</p>
            </body>
        </html>"

	Public Shared Sub CreatePdf(ByVal filePath As String)
		IronPdf.License.LicenseKey = "License"

		' Create a new PDF document from HTML template
		Dim renderer = New ChromePdfRenderer()
		Dim pdf = renderer.RenderHtmlAsPdf(HtmlTemplate)

		' Save the PDF document to a file
		pdf.SaveAs(filePath)
		Console.WriteLine($"PDF generated successfully at {filePath}")
	End Sub
End Class

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		PdfGenerator.CreatePdf("example.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

이 예에서는 HtmlTemplate 상수가 PDF 문서의 소스로 사용될 간단한 HTML 콘텐츠로 정의됩니다. CreatePdf 메서드는 IronPDF의 ChromePdfRenderer 클래스를 사용하여 이 HTML을 PDF로 변환하고 지정된 파일 경로에 저장합니다. 이는 상수 키워드를 활용하여 불변의 HTML 템플릿을 정의함으로써, IronPDF를 사용하여 정적 HTML 콘텐츠에서 PDF를 생성하는 용이함을 보여줍니다.

출력

여기에 출력된 PDF 파일이 있습니다:

C# Const (개발자를 위한 작동 방식): 그림 5 - PDF 출력 Csharp Const 5 related to 출력

결론

C# Const (개발자를 위한 작동 방식): 그림 6 - 라이선싱 Csharp Const 6 related to 결론

C#에서 const 키워드는 컴파일 시간에 알려진 불변 값을 정의하는 귀중한 기능입니다. 이는 코드의 가독성과 유지 보수를 개선하는 데 도움이 됩니다. 기억하세요, const 변수는 묵시적으로 정적이며 선언 시 초기화되어야 하며, 그 값은 컴파일 타임 상수여야 합니다. 비교적으로, readonly 변수는 더 많은 유연성을 제공하지만 실행 시에 초기화됩니다.

IronPDF는 PDF 조작의 강력한 기능뿐만 아니라 유연한 채택 모델로 돋보입니다. IronPDF의 기능을 탐색하려는 개발자 및 조직을 위해 IronPDF는 무료 체험판을 제공하며, 초기 투자 없이 기능과 통합 용이성을 평가할 수 있는 훌륭한 기회를 제공합니다.

IronPDF를 상용으로 사용하려면, 라이선싱 옵션은 $799부터 시작합니다. 이 가격 구조는 다양한 프로젝트 크기와 유형의 요구를 충족시키기 위해 설계되어 있으며, 개발 및 배포 계획에 가장 적합한 라이선스를 선택할 수 있습니다.

자주 묻는 질문

C#에서 const 키워드의 목적은 무엇인가요?

C#에서 const 키워드는 컴파일 시점에 알려진 상수 필드나 값을 정의하는데 사용하여 프로그램 전체에서 불변하게 만듭니다.

C#에서 상수 변수를 어떻게 선언하나요?

상수 변수는 const 키워드를 사용하고 데이터 타입 및 초기값을 지정하여 선언합니다. 예를 들면, const int myConstValue = 100;와 같습니다.

C#에서 const와 readonly의 차이는 무엇인가요?

const는 컴파일 시간 상수이며 선언 시 초기화되어야 합니다. 이는 정적이며 수정할 수 없습니다. readonly 변수는 선언 시 또는 생성자 내에서 할당될 수 있어 런타임 초기화를 허용합니다.

C#에서 const 변수를 메서드 내에 선언할 수 있나요?

네, const 변수는 메서드 내에 선언될 수 있으며 로컬 상수로 알려져 있으며 해당 메서드 내에서만 접근 가능합니다.

IronPDF는 HTML을 PDF로 어떻게 변환하나요?

IronPDF는 ChromePdfRenderer 클래스를 사용하여 HTML 문자열, 파일 또는 URL을 PDF 문서로 랜더링하여 HTML을 PDF로 변환합니다.

C# 상수와 라이브러리를 어떻게 사용할 수 있나요?

IronPDF는 C# 상수를 사용하여 예를 들면 상수 HTML 템플릿 문자열을 통해 HTML 콘텐츠를 PDF로 변환하여 PDF 문서를 효율적으로 생성할 수 있습니다.

.NET 애플리케이션에서 IronPDF를 사용하는 이유는 무엇인가요?

IronPDF는 .NET 애플리케이션에서 PDF 문서를 생성, 편집 및 읽기 위해 사용되며, HTML을 PDF로 변환하면서 레이아웃과 스타일을 보존하여 PDF 생성 작업을 단순화합니다.

C#의 컴파일 시간 상수는 무엇인가요?

컴파일 시간 상수는 컴파일 시점에 평가되고 고정되는 값입니다. const 키워드는 변수를 컴파일 시간 상수로 보장합니다.

C#의 정적 생성자는 무엇인가요?

정적 생성자는 클래스의 정적 필드를 초기화하며, 인스턴스가 생성되거나 정적 멤버가 접근되기 전에 자동으로 호출됩니다.

C#의 상수 표현식은 무엇인가요?

상수 표현식은 컴파일 시점에 완전히 평가될 수 있는 표현식으로, const 선언에서 사용될 수 있습니다.

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

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

제이콥은 맨체스터 대학교에서 토목공학 학사 학위(BEng)를 최우등으로 취득했습니다(1998~2001). 1999년 런던에서 첫 소프트웨어 회사를 설립하고 2005년 첫 .NET 컴포넌트를 개발한 후, 마이크로소프트 생태계 전반에 걸쳐 복잡한 문제를 해결하는 데 전문성을 발휘해 왔습니다.

그의 대표 제품인 IronPDF 및 Iron Suite .NET 라이브러리는 전 세계적으로 3천만 건 이상의 NuGet 설치 수를 기록했으며, 그의 핵심 코드는 전 세계 개발자들이 사용하는 다양한 도구에 지속적으로 활용되고 있습니다. 25년의 실무 경험과 41년의 코딩 전문성을 바탕으로, 제이콥은 차세대 기술 리더들을 양성하는 동시에 기업 수준의 C#, Java, Python PDF 기술 혁신을 주도하는 데 주력하고 있습니다.

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해