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

C# 기본 매개변수 (개발자용 작동 방식)

오늘 우리는 C#의 세계로 깊이 들어가고 강력한 기능인 기본 매개 변수를 배울 것입니다. 기본 인수 값 및 C#의 선택적 인수 개념에 초점을 맞추어 이해하기 쉽게 분해할 것입니다.

기본 매개 변수란?

C#에서는 기본 매개 변수, 또는 선택적 인수 매개 변수라 불리며, 메서드 정의에서 고정 인수에 값을 할당할 수 있습니다. 함수가 호출될 때 해당 매개 변수에 대한 인수가 제공되지 않으면 기본값을 사용합니다.

아래 코드 스니펫에서와 같이 기본 매개 변수 값이 메서드 정의에 설정됩니다:

public void Greet(string name = "Friend")
{
    Console.WriteLine("Hello, " + name);
}
public void Greet(string name = "Friend")
{
    Console.WriteLine("Hello, " + name);
}
Public Sub Greet(Optional ByVal name As String = "Friend")
	Console.WriteLine("Hello, " & name)
End Sub
$vbLabelText   $csharpLabel

여기에서 매개변수 name은 선택적 속성입니다. "Friend"라는 문자열이 기본값입니다. 인수를 전달하지 않고 Greet()을(를) 호출하면 'Friend'가 name의 값으로 사용됩니다.

필수 매개 변수 및 선택적 매개 변수

필수 매개 변수

필수 매개 변수는 함수나 메서드가 호출될 때 반드시 포함되어야 하는 매개 변수입니다. 기본값이 없으므로 항상 인수가 제공되어야 합니다. 컴파일러는 함수 또는 메서드 호출을 확인하고, 필수 매개 변수가 제공되지 않으면 컴파일 시간 오류를 발생시킵니다.

예제를 고려해 봅시다:

// Method with required parameters
public void IntroduceYourself(string firstName, string lastName)
{
    Console.WriteLine("Hello, my name is " + firstName + " " + lastName);
}
// Method with required parameters
public void IntroduceYourself(string firstName, string lastName)
{
    Console.WriteLine("Hello, my name is " + firstName + " " + lastName);
}
' Method with required parameters
Public Sub IntroduceYourself(ByVal firstName As String, ByVal lastName As String)
	Console.WriteLine("Hello, my name is " & firstName & " " & lastName)
End Sub
$vbLabelText   $csharpLabel

이 메서드에서는 firstNamelastName 모두 필수 매개변수입니다. IntroduceYourself을(를) 호출할 때는 두 매개변수에 대한 값을 제공해야 합니다. 인수를 생략하면 컴파일 시간 오류가 발생합니다.

IntroduceYourself("John", "Doe"); // Following call is correct
// IntroduceYourself("John"); // Error: lastName is missing
IntroduceYourself("John", "Doe"); // Following call is correct
// IntroduceYourself("John"); // Error: lastName is missing
IntroduceYourself("John", "Doe") ' Following call is correct
' IntroduceYourself("John"); // Error: lastName is missing
$vbLabelText   $csharpLabel

선택적 매개변수

반면에, 선택적 매개 변수는 유연성을 제공합니다. 메서드 정의 내에 기본값이 설정되어 있으며, 해당 매개 변수가 없는 상태로 메서드를 호출할 때 사용됩니다.

예를 들어, 우리는 IntroduceYourself 메서드를 수정하여 lastName 매개변수를 선택적으로 만들겠습니다:

// Method with an optional parameter
public void IntroduceYourself(string firstName, string lastName = "Doe")
{
    Console.WriteLine("Hello, my name is " + firstName + " " + lastName);
}
// Method with an optional parameter
public void IntroduceYourself(string firstName, string lastName = "Doe")
{
    Console.WriteLine("Hello, my name is " + firstName + " " + lastName);
}
' Method with an optional parameter
Public Sub IntroduceYourself(ByVal firstName As String, Optional ByVal lastName As String = "Doe")
	Console.WriteLine("Hello, my name is " & firstName & " " & lastName)
End Sub
$vbLabelText   $csharpLabel

이제 IntroduceYourselffirstName 매개변수와 함께 호출할 수 있습니다. 그렇게 하면 lastName은(는) 기본적으로 'Doe'로 설정됩니다.

IntroduceYourself("John", "Smith"); // Outputs: Hello, my name is John Smith
IntroduceYourself("John");          // Outputs: Hello, my name is John Doe
IntroduceYourself("John", "Smith"); // Outputs: Hello, my name is John Smith
IntroduceYourself("John");          // Outputs: Hello, my name is John Doe
IntroduceYourself("John", "Smith") ' Outputs: Hello, my name is John Smith
IntroduceYourself("John") ' Outputs: Hello, my name is John Doe
$vbLabelText   $csharpLabel

선택적 인수를 제공할 경우, 기본값을 덮어씁니다.

메서드 선언에서 필수 매개변수는 항상 선택적 매개변수보다 먼저 나와야 한다는 것을 기억하세요.

차이점 이해하기

필수 매개변수와 선택적 매개변수의 차이는 메서드를 호출하는 방식에 영향을 미치므로 중요합니다. 선택적 매개변수는 유연성을 제공하여 필요한 경우 특정 매개변수의 입력을 건너뛸 수 있습니다. 반면, 필수 매개변수는 항상 함수나 메서드에 필요한 데이터를 제공하도록 하여 런타임 오류를 방지하는 데 도움을 줍니다.

기본 매개변수 사용 규칙

기본 매개변수를 사용하여 메서드를 정의할 때 기억해야 할 몇 가지 주요 규칙이 있습니다:

  1. 기본값은 반드시 상수 표현식이어야 합니다. 변수나 메서드 호출을 사용할 수 없습니다.
  2. 모든 선택적 매개변수는 모든 필수 매개변수 이후에 매개변수 목록의 끝에 정의되어야 합니다.
  3. 선택적 매개변수를 사용하여 메서드를 호출할 때, 정의된 순서대로 선택적 매개변수의 생략된 인수를 제공하거나 명명된 인수를 사용할 수 있습니다.
  4. 선택적 인수 값이 제공되지 않으면 기본값이 사용됩니다.

선택적 인수에 대한 다음 코드 스니핏을 고려하세요:

static void Main(string[] args)
{
    ShowMessage("Hello");
    ShowMessage("Hello", "John");
}

public static void ShowMessage(string msg, string name = "Friend")
{
    Console.WriteLine(msg + ", " + name);
}
static void Main(string[] args)
{
    ShowMessage("Hello");
    ShowMessage("Hello", "John");
}

public static void ShowMessage(string msg, string name = "Friend")
{
    Console.WriteLine(msg + ", " + name);
}
Shared Sub Main(ByVal args() As String)
	ShowMessage("Hello")
	ShowMessage("Hello", "John")
End Sub

Public Shared Sub ShowMessage(ByVal msg As String, Optional ByVal name As String = "Friend")
	Console.WriteLine(msg & ", " & name)
End Sub
$vbLabelText   $csharpLabel

Main 메서드에서 우리는 ShowMessage을 두 번 호출합니다. 첫 번째로 인수 하나만 전달하므로 name 매개변수는 기본 값 'Friend'를 사용합니다. 두 번째에는 두 개의 인수를 전달하므로, 기본값 대신 "John"이 사용됩니다.

명명된 매개변수와 선택적 매개변수

C#은 명명된 매개변수와 선택적 매개변수를 지원합니다. 명명된 매개변수는 이름이 아닌 위치로 매개변수의 값을 지정할 수 있도록 합니다. 이는 메서드에 여러 선택적 매개변수가 있으며, 그 중 하나에만 값을 제공하고 다른 것에는 제공하지 않으려 할 때 유용할 수 있습니다.

다음 예제에서는 ShowGreetings이 두 개의 선택적 매개변수를 가집니다:

public static void ShowGreetings(string greeting = "Hello", string name = "Friend")
{
    Console.WriteLine(greeting + ", " + name);
}
public static void ShowGreetings(string greeting = "Hello", string name = "Friend")
{
    Console.WriteLine(greeting + ", " + name);
}
Public Shared Sub ShowGreetings(Optional ByVal greeting As String = "Hello", Optional ByVal name As String = "Friend")
	Console.WriteLine(greeting & ", " & name)
End Sub
$vbLabelText   $csharpLabel

이 메서드를 첫 번째 매개변수만으로 호출할 수 있습니다:

ShowGreetings("Hi");
ShowGreetings("Hi");
ShowGreetings("Hi")
$vbLabelText   $csharpLabel

또는 명명된 인수를 사용하여 greeting 인수를 생략하고 name의 값을 제공할 수 있습니다:

ShowGreetings(name: "John");
ShowGreetings(name: "John");
ShowGreetings(name:= "John")
$vbLabelText   $csharpLabel

명명된 매개변수를 사용하는 이점은 무엇인가요?

C#에서 명명된 매개변수는 여러 가지 이점을 제공합니다:

  1. Improved Readability: 명명된 매개변수는 코드 읽기와 이해가 더 쉽도록 만들어 줍니다. 매개변수의 이름을 지정함으로써 각 인수가 무엇을 나타내는지 명확히 합니다. 이는 여러 매개변수가 있는 메서드에서 특히 유용할 수 있습니다.
  2. Flexible Argument Order: 명명된 매개변수를 사용하면, 메서드 선언에서 매개변수가 나타나는 순서대로만 인수를 공급하는 것이 아니라 아무 순서로나 인수를 공급할 수 있습니다. 이는 코드의 유연성을 높이고 몇몇 경우에 판독성을 개선할 수 있습니다.
  3. Ease with Optional Parameters: 명명된 매개변수는 종종 선택적 매개변수와 함께 사용됩니다. 메서드에 여러 선택적 매개변수가 있을 때, 명명된 매개변수를 사용하여 일부 선택적 매개변수에 대해서만 값을 제공할 수 있습니다. 이 방법을 사용하면 모든 선택적 매개변수에 대해 값을 제공할 필요가 없으며, 기본값을 변경하려는 것들만 제공합니다.

여기 명명된 매개변수 사용의 또 다른 예가 있습니다:

// Method Declaration
public void RegisterUser(string username, string password, string email = "", bool subscribeToNewsletter = false)
{
    // Method body
}

// Method Call
RegisterUser(username: "JohnDoe", password: "password123", subscribeToNewsletter: true);
// Method Declaration
public void RegisterUser(string username, string password, string email = "", bool subscribeToNewsletter = false)
{
    // Method body
}

// Method Call
RegisterUser(username: "JohnDoe", password: "password123", subscribeToNewsletter: true);
' Method Declaration
Public Sub RegisterUser(ByVal username As String, ByVal password As String, Optional ByVal email As String = "", Optional ByVal subscribeToNewsletter As Boolean = False)
	' Method body
End Sub

' Method Call
RegisterUser(username:= "JohnDoe", password:= "password123", subscribeToNewsletter:= True)
$vbLabelText   $csharpLabel

위의 코드에서 email은 우리가 생략한 선택적 매개변수이며, 목록의 마지막 매개변수임에도 우리는 truesubscribeToNewsletter을 설정하기로 선택했습니다. 명명된 매개변수를 사용하면 각 인수가 무엇을 나타내는지 명확하게 해주고 우리가 제공하고 싶은 인수만 지정할 수 있게 합니다.

기본 매개변수와 메서드 오버로딩

메서드 오버로딩이란 무엇인가요?

C#에서 메서드 오버로딩, 또는 함수 오버로드는 같은 이름으로 여러 메서드를 정의하되 서로 다른 매개변수 세트를 사용하는 기능입니다. 이는 동일한 메서드 이름을 사용하여 다양한 작업을 수행할 수 있게 하여 코드를 더 직관적이고 사용하기 쉽게 만듭니다.

다음은 오버로드된 메서드의 코드 예제입니다:

public void DisplayMessage(string message)
{
    Console.WriteLine(message);
}

public void DisplayMessage(string message, string name)
{
    Console.WriteLine(message + ", " + name);
}
public void DisplayMessage(string message)
{
    Console.WriteLine(message);
}

public void DisplayMessage(string message, string name)
{
    Console.WriteLine(message + ", " + name);
}
Public Sub DisplayMessage(ByVal message As String)
	Console.WriteLine(message)
End Sub

Public Sub DisplayMessage(ByVal message As String, ByVal name As String)
	Console.WriteLine(message & ", " & name)
End Sub
$vbLabelText   $csharpLabel

위의 예제에서 DisplayMessage 메서드는 오버로드되었습니다. 메서드의 한 버전은 단일 string 매개변수를 허용하며, 다른 하나는 두 개의 string 매개변수를 허용합니다.

오버로딩 대신 기본 매개변수 사용

기본 매개변수는 종종 오버로딩에 대한 대안으로 사용될 수 있습니다. 메서드에서 매개변수에 기본값을 제공함으로써, 호출자가 해당 매개변수를 제공할지 선택할 수 있도록 합니다. 이는 메서드를 오버로딩보다 적은 코드로 동일한 유연성을 제공할 수 있게 합니다.

오버로딩 대신 기본 매개변수를 사용하여 위의 예제를 재작성하는 방법은 다음과 같습니다:

public void DisplayMessage(string message, string name = "Friend")
{
    Console.WriteLine(message + ", " + name);
}
public void DisplayMessage(string message, string name = "Friend")
{
    Console.WriteLine(message + ", " + name);
}
Public Sub DisplayMessage(ByVal message As String, Optional ByVal name As String = "Friend")
	Console.WriteLine(message & ", " & name)
End Sub
$vbLabelText   $csharpLabel

이제 DisplayMessage를 한 개 또는 두 개의 인수와 함께 호출할 수 있습니다:

DisplayMessage("Hello");
DisplayMessage("Hello", "John");
DisplayMessage("Hello");
DisplayMessage("Hello", "John");
DisplayMessage("Hello")
DisplayMessage("Hello", "John")
$vbLabelText   $csharpLabel

첫 번째 호출에서는 name 매개변수가 기본값 'Friend'를 사용합니다. 두 번째 호출에서는 제공된 인수 "John"을 대신 사용합니다.

기본 매개변수에 대한 기본값은 상수 식이어야 하며, 변수나 메서드 호출이 될 수 없음을 기억하세요. 이는 컴파일 시간에 값이 알려져야 하기 때문입니다.

Iron Software Suite

IronPDF 라이브러리로 PDF 솔루션을 제공하는 IronPDF, C# Excel 작업을 위한 IronXL, 고급 텍스트 인식을 위한 IronOCR, 바코드 생성을 위한 IronBarcode 등을 포함한 Iron Software suite를 살펴보겠습니다. 이 강력한 라이브러리들은 C# 애플리케이션의 기능을 확장하는 데 도움을 주기 위해 특별히 설계되었습니다. 기본 매개변수,명명된 인수 사양 및 메서드 오버로딩을 포함한 우리가 기사에서 논의한 개념과 쉽게 관련될 수 있습니다.

IronPDF: 이는 IronPDF로 HTML을 PDF로 변환하는 C# 라이브러리입니다. IronPDF를 사용할 때 기본 및 선택적 매개변수를 이해하는 것이 중요할 수 있습니다. IronPDF의 많은 메서드는 선택적 매개변수가 있어 메서드 서명을 복잡하지 않게 광범위한 사용자 정의를 할 수 있게 합니다. 자세한 내용은 IronPDF HTML to 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

IronXL: 이 라이브러리는 C# 애플리케이션이 다양한 형식으로 Excel 파일을 읽고, 쓰고, 조작할 수 있게 합니다. IronXL의 메서드는 파일 저장 형식이나 데이터를 가져올 때 헤더를 포함할지 여부 등의 다양한 매개변수를 가질 수 있습니다. 셀 범위, 서식 옵션 등을 지정하는 데 명명된 및 선택적 매개변수가 광범위하게 사용된다는 것도 알 수 있습니다.
IronOCR: 이미지 및 PDF에서 텍스트와 바코드를 읽을 수 있는 고급 광학 문자 인식 (OCR) 라이브러리입니다. IronOCR의 메서드는 텍스트의 언어, 적용할 오류 수정 수준 등 OCR 프로세스의 측면을 제어하기 위한 선택적 매개변수를 가질 수 있습니다. 이러한 매개변수를 이해하면 OCR 프로세스를 더 잘 제어할 수 있습니다.
IronBarcode: 이 라이브러리는 .NET 애플리케이션에서 바코드를 읽고 생성하는 다재다능한 도구입니다. 여기에서도 기본 매개변수를 이해하는 것은 중요합니다. 예를 들어, 바코드를 생성할 때 크기, 형식 또는 바코드의 값을 지정하는 선택적 매개변수가 있을 수 있습니다.

결론

결론적으로, C#에서 기본 및 선택적 매개변수를 사용하는 방법을 숙달하면 프로그래밍 효율성 및 코드의 다재다능성이 크게 향상됩니다. 이 개념들은 C#의 기본이 되는 요소입니다.

이러한 라이브러리에 관해 말하자면, 각 라이선스는 $799부터 시작하며, 이러한 라이브러리에서는 Iron Software 제품의 무료 체험판도 제공합니다. 그러나 Iron Software는 패키지 거래를 제공하며: 두 개의 개별 라이센스 비용으로 전체 suite를 얻을 수 있습니다.

자주 묻는 질문

기본 매개변수가 C#에서 코드 효율성을 어떻게 향상시킬 수 있습니까?

C#의 기본 매개변수는 개발자가 메서드 인수에 미리 정의된 값을 할당할 수 있게 해주어 여러 메서드 오버로드가 필요하지 않게 하고 코드 유지보수를 단순화합니다.

C#에서 기본 매개변수를 이름 매개변수와 함께 사용할 수 있습니까?

네, C#에서는 기본 매개변수를 이름 매개변수와 결합하여 개발자가 필요한 인수만 이름으로 지정할 수 있게 하여 코드 가독성과 유연성을 향상시킵니다.

C#에서 선택적 매개변수를 사용하는 이점은 무엇입니까?

C#에서 선택적 매개변수는 메서드 호출 시 특정 인수를 생략할 수 있게 하여 미리 정의된 값으로 기본 설정될 수 있어 메서드 호출을 단순화하고 코드 중복을 줄입니다.

메서드 오버로딩은 C#의 기본 매개변수 사용과 어떻게 다른가요?

메서드 오버로딩은 같은 이름을 가진 여러 개의 메서드를 다른 매개변수로 생성하는 것을 포함하는 반면, 기본 매개변수는 누락된 인수에 대한 대체 값을 제공하여 하나의 메서드로 여러 시나리오를 처리할 수 있도록 합니다.

C#에서 기본 매개변수를 사용할 때 따라야 할 규칙은 무엇입니까?

주요 규칙에는 기본 값이 상수 표현식인지 확인하고 필수 매개변수 뒤에 선택적 매개변수를 배치하며 누락된 매개변수를 지정하기 위해 이름 매개변수를 사용하는 것이 포함됩니다.

기본 매개변수가 IronPDF 라이브러리 사용을 어떻게 최적화할 수 있습니까?

IronPDF에서는 기본 매개변수를 사용하여 모든 인수를 지정하지 않고 HTML 콘텐츠나 파일 경로와 같은 설정을 조정할 수 있어 PDF 생성이 간소화되어 출력을 효율적으로 사용자 정의할 수 있습니다.

이름 매개변수가 코드 가독성 개선에 어떤 역할을 하나요?

이름 매개변수는 인수를 위치가 아닌 이름으로 지정할 수 있어 코드를 더 읽기 쉽게 하고 인수 순서와 관련된 오류를 줄입니다.

기본 매개변수를 마스터하는 것이 개발자에게 중요한 이유는 무엇입니까?

기본 매개변수를 마스터하는 것은 메서드 호출의 유연성을 제공하고 필수 데이터를 제공하며 코드 구조를 단순화하여 프로그래밍 효율성을 향상시키기 때문에 중요합니다.

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

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