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

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

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

이 기사에서는 ref 키워드의 기본 사항, 적용 방법 및 다양한 데이터 유형과 함께 사용하는 것의 뉘앙스를 안내할 것입니다. 우리는 또한 PDF 라이브러리인 IronPDF 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으로 초기화합니다. 그런 다음 ModifyNumber를 호출하여 numberref 매개변수로 전달합니다. 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# Ref (개발자를 위한 작동 방식): 그림 1

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

IronPDF를 C#과 함께 ref 키워드를 사용하여 통합하는 예시로서 동적으로 계산된 값을 포함하는 PDF 보고서를 생성하려는 시나리오를 고려하십시오. 이 값은 ref 매개변수를 수락하는 메서드에서 계산되어 이 값이 변경되고, 이 변경이 생성된 PDF에 반영됩니다.

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

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

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# Ref (개발자를 위한 작동 방식): 그림 2

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

결론

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

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

ref을 다루면서 경험이 쌓이면, 프로그래밍 요구사항을 충족하기 위해 언제 어떻게 효과적으로 사용할지에 대한 더 나은 이해를 하게 될 것입니다. IronPDF는 PDF 기능을 시작하기 위한 무료 체험을 제공하며 가격은 $999부터 시작합니다.

자주 묻는 질문

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