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

C# Ref (개발자들에게 어떻게 작동하는가)

C#에서 ref 키워드는 메소드가 전달된 참조형 변수의 매개변수 값을 수정할 수 있도록 하는 강력한 기능입니다. 응용 프로그램 내에서 데이터를 관리하고 조작하는 능력을 향상시킬 수 있는 ref의 사용법을 이해하세요.

이 문서는 ref 키워드의 기본사항, 그 응용, 그리고 다양한 데이터 유형과 함께 사용하는 방법의 미묘한 차이점에 대해 안내합니다. 또한 PDF 라이브러리인 IronPDF library for .NET에 대해 배울 것입니다.

ref 매개변수 이해하기

ref 매개변수는 메소드에 전달된 변수의 참조 역할을 하는 메소드 매개변수입니다. 표준 값 매개변수와 달리 변수의 복사본만 전달되는 것이 아니라, ref 매개변수는 호출된 메소드에서 원래 변수의 값을 수정할 수 있도록 합니다. 이 행동은 메소드가 전달된 변수의 상태를 업데이트해야 할 때 필수적입니다.

다음 예제를 통해 메소드 호출 전반에 걸쳐 같은 객체 내에서 참조 형 변수매개변수 값을 유지하는 방식을 중점적으로 ref의 기본 사용법을 설명합니다:

class Program
{
    static void Main()
    {
        int number = 100;
        ModifyNumber(ref number);
        Console.WriteLine(number); // Output: 200
    }

    // Method that modifies the original number through 'ref'
    static void ModifyNumber(ref int number)
    {
        number = 200; // Modifies the original value
    }
}
class Program
{
    static void Main()
    {
        int number = 100;
        ModifyNumber(ref number);
        Console.WriteLine(number); // Output: 200
    }

    // Method that modifies the original number through 'ref'
    static void ModifyNumber(ref int number)
    {
        number = 200; // Modifies the original value
    }
}
Friend Class Program
	Shared Sub Main()
		Dim number As Integer = 100
		ModifyNumber(number)
		Console.WriteLine(number) ' Output: 200
	End Sub

	' Method that modifies the original number through 'ref'
	Private Shared Sub ModifyNumber(ByRef number As Integer)
		number = 200 ' Modifies the original value
	End Sub
End Class
$vbLabelText   $csharpLabel

이 예제에서는 Main 메소드가 정수 number을 선언하고 100으로 초기화합니다. 그런 다음 numberref 매개변수로 전달하여 ModifyNumber를 호출합니다. ModifyNumber 내에서, number의 값이 200으로 변경됩니다. number이 참조로 전달되었기 때문에 Main 메소드에서 원래 값에 변경 사항이 반영되며, 콘솔에 200이 출력됩니다.

ref 매개변수가 작동하는 방식

ref 키워드로 메소드 매개변수를 선언하면, 해당 매개변수가 복사본이 아닌 원래 변수를 참조하게 됨을 컴파일러에 알립니다. 이는 실제 값이 아닌 변수의 메모리 주소를 전달하여 달성됩니다. 호출된 메소드와 호출하는 메소드 모두 동일한 메모리 위치에 액세스하므로 매개변수에 대한 변경 사항이 원래 변수에 직접 적용됩니다.

ref을 이해하는 핵심은 그것이 값 유형과 참조 유형 모두에 사용할 수 있다는 것입니다. 값 유형에는 정수 및 구조체와 같은 간단한 데이터 유형이 포함되고, 참조 유형에는 객체 및 배열이 포함됩니다. 참조 형 변수는 본질적으로 메모리 주소를 포함하지만, 참조 형과 ref을 함께 사용하면 객체의 내용뿐만 아니라 실제 참조도 수정할 수 있습니다.

ref와 out의 차이점

두 키워드 refout 모두 원래 변수들을 수정할 수 있게 해주지만, 중요한 차이점이 존재합니다. out 매개변수는 메소드에 전달되기 전에 초기화가 필요하지 않습니다. 반면 ref 매개변수는 전달되기 전에 변수가 초기화되어 있어야 합니다. 또한 out 매개변수를 사용하는 메소드는 메소드가 반환되기 전에 값을 할당해야 합니다. 이 요구사항은 ref 매개변수에는 적용되지 않습니다.

다음은 out 키워드를 사용하는 방법입니다:

class Program
{
    static void Main()
    {
        int result;
        CalculateResult(out result);
        Console.WriteLine(result); // Output: 100
    }

    // Method that calculates a result and assigns it via 'out'
    static void CalculateResult(out int calculation)
    {
        calculation = 20 * 5; // Must initialize the out parameter
    }
}
class Program
{
    static void Main()
    {
        int result;
        CalculateResult(out result);
        Console.WriteLine(result); // Output: 100
    }

    // Method that calculates a result and assigns it via 'out'
    static void CalculateResult(out int calculation)
    {
        calculation = 20 * 5; // Must initialize the out parameter
    }
}
Friend Class Program
	Shared Sub Main()
		Dim result As Integer = Nothing
		CalculateResult(result)
		Console.WriteLine(result) ' Output: 100
	End Sub

	' Method that calculates a result and assigns it via 'out'
	Private Shared Sub CalculateResult(ByRef calculation As Integer)
		calculation = 20 * 5 ' Must initialize the out parameter
	End Sub
End Class
$vbLabelText   $csharpLabel

이 경우 CalculateResult은 메소드 내에서 calculation을 초기화하고, Main은 그 결과를 반영합니다.

메소드 오버로딩에서 ref의 실용적인 사용

ref은 메소드 서명이 ref 키워드로 변경될 때 메소드 오버로딩에서도 사용할 수 있습니다. 메소드 서명은 메소드 이름 및 매개변수 유형으로 구성되며, 매개변수가 참조(ref), 값으로 전달되거나 out 매개변수로 전달되는지를 포함합니다.

ref와 값 매개변수를 기반으로 메소드를 오버로딩하는 것을 고려합니다:

class Program
{
    static void Main()
    {
        int normalParameter = 10, refParameter = 10;
        IncrementValue(normalParameter);
        IncrementValue(ref refParameter);
        Console.WriteLine($"Normal: {normalParameter}, Ref: {refParameter}"); // Output: Normal: 10, Ref: 11
    }

    // Method that increments a copy of the integer
    static void IncrementValue(int number)
    {
        number++;
    }

    // Method that increments the original integer using 'ref'
    static void IncrementValue(ref int number)
    {
        number++;
    }
}
class Program
{
    static void Main()
    {
        int normalParameter = 10, refParameter = 10;
        IncrementValue(normalParameter);
        IncrementValue(ref refParameter);
        Console.WriteLine($"Normal: {normalParameter}, Ref: {refParameter}"); // Output: Normal: 10, Ref: 11
    }

    // Method that increments a copy of the integer
    static void IncrementValue(int number)
    {
        number++;
    }

    // Method that increments the original integer using 'ref'
    static void IncrementValue(ref int number)
    {
        number++;
    }
}
Friend Class Program
	Shared Sub Main()
		Dim normalParameter As Integer = 10, refParameter As Integer = 10
		IncrementValue(normalParameter)
		IncrementValue(refParameter)
		Console.WriteLine($"Normal: {normalParameter}, Ref: {refParameter}") ' Output: Normal: 10, Ref: 11
	End Sub

	' Method that increments a copy of the integer
'INSTANT VB TODO TASK: VB does not allow method overloads which differ only in parameter ByVal/ByRef:
'ORIGINAL LINE: static void IncrementValue(int number)
	Private Shared Sub IncrementValue(ByVal number As Integer)
		number += 1
	End Sub

	' Method that increments the original integer using 'ref'
'INSTANT VB TODO TASK: VB does not allow method overloads which differ only in parameter ByVal/ByRef:
'ORIGINAL LINE: static void IncrementValue(ref int number)
	Private Shared Sub IncrementValue(ByRef number As Integer)
		number += 1
	End Sub
End Class
$vbLabelText   $csharpLabel

여기에서 IncrementValue은 일반 매개변수를 받는 버전과 ref 매개변수를 받는 버전으로 오버로딩됩니다. ref 버전은 원래 변수를 증가시키고, 일반 버전은 복사본만 변경합니다.

IronPDF 소개

C# 참조 (개발자를 위한 동작 방식): 그림 1

IronPDF for .NET PDF Solutions는 PDF 문서 작업을 위한 포괄적인 .NET 라이브러리입니다. 주로 C#으로 구축되었으며 HTML 콘텐츠로부터의 PDF 생성을 단순화하는 데 중점을 두고 있습니다. Chrome 렌더링 엔진을 활용하여, IronPDF는 HTML, CSS, JavaScript 및 이미지 컨텐츠의 세부사항을 포착하는 고품질의 픽셀 완전한 PDF 문서를 제공합니다.

이 라이브러리는 다양한 .NET 환경을 지원하는 다재다능한 라이브러리로, .NET Framework, .NET Core 및 .NET Standard를 포함하며 데스크탑에서 웹 기반 시스템에 이르기까지 다양한 애플리케이션에 적합합니다. IronPDF는 PDF 생성 지원뿐만 아니라 PDF 수정, 보안, 그리고 다른 형식으로의 변환 기능도 제공합니다.

이 기능은 텍스트 및 이미지 추출, 양식 작성, 디지털 서명 적용까지 확대되어 .NET 애플리케이션 내에서 PDF 문서의 포괄적인 처리를 보장합니다.

IronPDF와 C# 및 ref 키워드 통합

IronPDF는 C#과 통합하여 ref 키워드를 사용하여 매개변수를 참조로 전달하는 것을 포함해 언어의 강력한 기능을 활용할 수 있습니다. 이 통합은 변수가 런타임에 결정되는 값에 따라 콘텐츠가 의존할 수 있는 동적인 PDF 생성을 허용합니다.

C#에서 ref 키워드를 사용하여 IronPDF를 통합하는 경우를 보여주기 위해, 동적으로 계산된 값을 포함한 PDF 보고서를 생성하려는 시나리오를 고려합니다. 이 값은 ref 매개변수를 수락하여 메소드 내에서 계산될 것이며, 이는 생성된 PDF에 반영됩니다.

코드 예제: ref를 사용하여 동적 콘텐츠로 PDF 생성

다음의 C# 코드는 IronPDF와 ref 키워드를 함께 사용하여 PDF 문서를 생성하는 방법을 보여줍니다. 코드는 ref 매개변수를 수락하는 메소드를 통해 값을 계산하고 수정한 후 IronPDF를 사용하여 이 동적 컨텐츠를 포함하는 PDF를 생성합니다.

using IronPdf;
using System;

class Program
{
    static void Main(string[] args)
    {
        // Set your IronPDF license key
        License.LicenseKey = "License-Key";

        // Initialize the value
        int totalSales = 150;

        // Modify the value within the method using 'ref'
        AddMonthlyBonus(ref totalSales);

        // Use IronPDF to generate a PDF report
        var Renderer = new ChromePdfRenderer();
        var PDF = Renderer.RenderHtmlAsPdf($"<h1>Monthly Sales Report</h1><p>Total Sales, including bonus: {totalSales}</p>");

        // Save the PDF to a file
        PDF.SaveAs("MonthlySalesReport.pdf");

        // Confirm the PDF has been generated
        Console.WriteLine("PDF generated successfully. Check your project directory.");
    }

    // Method that adds a monthly bonus to sales using 'ref'
    static void AddMonthlyBonus(ref int sales)
    {
        // Assume a bonus of 10% of the sales
        sales += (int)(sales * 0.1);
    }
}
using IronPdf;
using System;

class Program
{
    static void Main(string[] args)
    {
        // Set your IronPDF license key
        License.LicenseKey = "License-Key";

        // Initialize the value
        int totalSales = 150;

        // Modify the value within the method using 'ref'
        AddMonthlyBonus(ref totalSales);

        // Use IronPDF to generate a PDF report
        var Renderer = new ChromePdfRenderer();
        var PDF = Renderer.RenderHtmlAsPdf($"<h1>Monthly Sales Report</h1><p>Total Sales, including bonus: {totalSales}</p>");

        // Save the PDF to a file
        PDF.SaveAs("MonthlySalesReport.pdf");

        // Confirm the PDF has been generated
        Console.WriteLine("PDF generated successfully. Check your project directory.");
    }

    // Method that adds a monthly bonus to sales using 'ref'
    static void AddMonthlyBonus(ref int sales)
    {
        // Assume a bonus of 10% of the sales
        sales += (int)(sales * 0.1);
    }
}
Imports IronPdf
Imports System

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Set your IronPDF license key
		License.LicenseKey = "License-Key"

		' Initialize the value
		Dim totalSales As Integer = 150

		' Modify the value within the method using 'ref'
		AddMonthlyBonus(totalSales)

		' Use IronPDF to generate a PDF report
		Dim Renderer = New ChromePdfRenderer()
		Dim PDF = Renderer.RenderHtmlAsPdf($"<h1>Monthly Sales Report</h1><p>Total Sales, including bonus: {totalSales}</p>")

		' Save the PDF to a file
		PDF.SaveAs("MonthlySalesReport.pdf")

		' Confirm the PDF has been generated
		Console.WriteLine("PDF generated successfully. Check your project directory.")
	End Sub

	' Method that adds a monthly bonus to sales using 'ref'
	Private Shared Sub AddMonthlyBonus(ByRef sales As Integer)
		' Assume a bonus of 10% of the sales
		sales += CInt(Math.Truncate(sales * 0.1))
	End Sub
End Class
$vbLabelText   $csharpLabel

C# 참조 (개발자를 위한 동작 방식): 그림 2

이 예에서는 totalSales이 150에서 시작합니다. AddMonthlyBonus 메소드는 이 값을 참조로 사용하여 ref 키워드로 10% 보너스를 계산하고, 원래 판매 값에 추가합니다. IronPDF는 보너스를 포함한 총 매출을 보고하는 HTML 스니펫을 포함하는 PDF 문서를 생성합니다. 최종 문서는 'MonthlySalesReport.pdf'로 로컬에 저장됩니다.

결론

C# 참조 (개발자를 위한 동작 방식): 그림 3

C#에서 ref 키워드를 이해함으로써 메소드 간에 데이터가 전달되는 방식을 관리하는 귀중한 도구를 제공합니다. 매개변수로 전달된 원래 값을 메소드가 직접 수정할 수 있게 함으로써, ref은 메소드를 더욱 유연하고 강력하게 만들 수 있습니다.

ref에 대한 경험을 쌓다 보면 언제 그리고 어떻게 효과적으로 사용하는지 더 잘 이해할 수 있게 됩니다. IronPDF는 PDF 기능으로 시작하기 위한 무료 체험판을 제공하며 가격은 $799부터 시작합니다.

자주 묻는 질문

C#에서 참조 유형 변수의 매개변수 값을 어떻게 수정할 수 있습니까?

C#에서는 ref 키워드를 사용하여 메서드가 참조 유형 변수의 매개변수 값을 수정할 수 있도록 할 수 있습니다. 이를 통해 메서드는 단순한 복사본이 아닌 원래 변수 자체를 변경할 수 있습니다.

C#에서 ref 키워드와 out 키워드의 차이점은 무엇입니까?

ref 키워드는 변수를 메서드에 전달하기 전에 초기화해야 하지만, out 키워드는 사전 초기화가 필요하지 않으며 메서드가 값을 반환하기 전에 할당해야 합니다.

C#에서 ref 키워드를 값 및 참조 유형 모두에 사용할 수 있습니까?

네, ref 키워드는 값 유형(예: 정수) 및 참조 유형(예: 객체) 모두에 사용할 수 있으며 메서드가 실제 데이터나 참조 자체를 수정할 수 있습니다.

C#에서 메서드 오버로딩에 ref 키워드는 어떻게 사용됩니까?

ref 키워드는 메서드 시그니처를 구분하는 데 메서드 오버로딩에서 사용할 수 있습니다. 이를 통해 매개변수가 참조에 의해 전달되는지, 값에 의해 전달되는지에 따라 다른 메서드를 호출할 수 있습니다.

.NET에서 PDF 문서를 생성하고 조작하는 방법은 무엇입니까?

IronPDF라는 .NET 라이브러리를 사용하면 PDF 문서를 생성하고 조작할 수 있습니다. 편집, 보안, PDF 변환 등의 기능을 제공하며 다양한 .NET 환경과 호환됩니다.

C#을 사용하여 .NET PDF 라이브러리를 ref 키워드로 어떻게 통합합니까?

C#에서 IronPDF를 통합하여 동적 PDF를 생성할 수 있으며, ref 키워드를 사용하여 PDF 콘텐츠 내 값을 동적으로 업데이트하는 것과 같은 데이터를 나타내는 변수를 전달하고 수정할 수 있습니다.

C# 메서드에서 ref 키워드의 실제 사용 사례는 무엇입니까?

ref 키워드의 실제 사용 사례로는 메서드 내부에서 변수의 값을 수정하여 메서드 외부에서도 변경 사항이 반영되도록 보장하는 것, 예를 들어 보고서의 재무 총계를 조정하는 것입니다.

C#에서 ref 키워드의 사용이 메서드의 유연성을 어떻게 향상합니까?

ref 키워드는 원래 매개변수 값을 직접 수정할 수 있도록 하여 메서드의 유연성을 향상시켜 데이터 관리 및 여러 메서드 호출에 걸친 업데이트를 촉진합니다.

C#에서 ref 키워드를 사용할 때 어떤 주의를 기울여야 합니까?

C#에서 ref 키워드를 사용할 때, 메서드에 전달하기 전에 변수가 초기화되었는지 확인하십시오, 왜냐하면 ref는 사전 초기화된 변수를 필요로 하기 때문입니다.

PDF 조작 for .NET 라이브러리에 대한 추가 정보를 어디에서 찾을 수 있습니까?

IronPDF에 대한 기능 및 통합 세부 정보는 공식 웹사이트를 방문하여 찾을 수 있으며, 무료 체험판과 가격 정보를 제공합니다.

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

제이콥 멜러는 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시간 온라인으로 운영합니다.
채팅
이메일
전화해