명명된 인수
Coddy C# 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 70개 중 49번째.
명명된 인수(Named arguments)를 사용하면 위치에 의존하는 대신 이름을 사용하여 어떤 매개변수가 값을 받을지 지정할 수 있습니다. 이를 통해 메서드 호출이 더 명확해지며 인수를 어떤 순서로든 전달할 수 있습니다.
매개변수 이름 뒤에 콜론을 붙이고 그 뒤에 값을 사용하세요:
public static void CreateUser(string name, int age, bool isActive)
{
Console.WriteLine($"{name}, Age: {age}, Active: {isActive}");
}
// 명명된 인수 사용
CreateUser(name: "Alice", age: 25, isActive: true);
CreateUser(age: 30, isActive: false, name: "Bob"); // 어떤 순서로든 작동합니다명명된 인수는 선택적 매개변수와 결합될 때 더욱 빛을 발합니다. 앞에 있는 모든 선택적 값을 제공하는 대신, 필요한 값으로 직접 건너뛸 수 있습니다.
public static void Configure(string host, int port = 8080, bool useSSL = false, int timeout = 30)
{
Console.WriteLine($"{host}:{port}, SSL: {useSSL}, Timeout: {timeout}");
}
// Skip port and useSSL, only specify timeout
Configure("localhost", timeout: 60);
Configure("server.com", useSSL: true);위치 인자와 명명된 인자를 혼합하여 사용할 수 있지만, 위치 인자가 반드시 먼저 와야 합니다. 명명된 인자는 가독성을 높여주며, 특히 동일한 타입의 매개변수가 여러 개 있는 메서드나 값만으로는 의미가 명확하지 않은 불리언(boolean) 플래그의 경우에 유용합니다.
챌린지
쉬움명명된 인수(named arguments)를 활용하여 메서드 호출을 명확하게 만드는 보고서 생성기를 만들어 보겠습니다. 메서드에 여러 매개변수가 있는 경우, 특히 동일한 타입의 매개변수나 불리언(boolean) 플래그가 포함된 경우 명명된 인수를 사용하면 코드가 스스로를 설명하는(self-documenting) 효과를 얻을 수 있습니다.
코드는 두 개의 파일로 구성됩니다:
ReportGenerator.cs:Reports네임스페이스 안에 여러 개의 선택적 매개변수(optional parameters)를 가진 메서드를 포함하는ReportGenerator클래스를 생성합니다:GenerateReport(string title, string author = "Anonymous", bool includeHeader = true, bool includeSummary = false, int maxPages = 10)- 이 메서드는 보고서 설정을 설명하는 형식화된 문자열을 반환해야 합니다.
- 형식:
Report: {title} by {author} | Header: {Yes/No}, Summary: {Yes/No}, Max Pages: {maxPages}
Program.cs: 메인 파일에서GenerateReport를 다양한 방식으로 호출하여 명명된 인수의 강력함을 보여줍니다. 필요하지 않은 선택적 매개변수는 건너뛰고 각 보고서에 중요한 매개변수만 지정합니다.
세 개의 입력을 받게 됩니다:
- 첫 번째 보고서 제목
- 두 번째 보고서 제목
- 세 번째 보고서 제목
서로 다른 설정으로 세 개의 보고서를 생성하세요:
- 첫 번째 보고서: 제목만 사용 (모든 기본값 적용)
- 두 번째 보고서: 제목과 함께
includeSummary: true및maxPages: 25사용 (author와 includeHeader는 건너뛰고 기본값 유지) - 세 번째 보고서: 제목과 함께
author: "Admin",includeHeader: false,includeSummary: true사용 (maxPages는 기본값 유지)
각 보고서 결과를 개별 줄에 출력하세요.
예를 들어, 입력값이 Sales Q1, Annual Review, Inventory Check인 경우 출력은 다음과 같아야 합니다:
Report: Sales Q1 by Anonymous | Header: Yes, Summary: No, Max Pages: 10
Report: Annual Review by Anonymous | Header: Yes, Summary: Yes, Max Pages: 25
Report: Inventory Check by Admin | Header: No, Summary: Yes, Max Pages: 10명명된 인수를 사용하면 관심 있는 매개변수로 직접 건너뛸 수 있다는 점에 주목하세요. includeSummary를 변경하기 위해 author나 includeHeader를 굳이 지정할 필요가 없습니다. 이를 통해 메서드 호출의 가독성이 훨씬 높아지고 의도가 명확하게 드러납니다!
치트 시트
명명된 인수(Named arguments)를 사용하면 위치에 의존하는 대신 이름을 사용하여 어떤 매개변수가 값을 받을지 지정할 수 있습니다. 이를 통해 메서드 호출이 더 명확해지고 인수를 어떤 순서로든 전달할 수 있습니다.
값 앞에 매개변수 이름과 콜론을 사용하세요:
public static void CreateUser(string name, int age, bool isActive)
{
Console.WriteLine($"{name}, Age: {age}, Active: {isActive}");
}
// 명명된 인수 사용
CreateUser(name: "Alice", age: 25, isActive: true);
CreateUser(age: 30, isActive: false, name: "Bob"); // 어떤 순서로든 작동함명명된 인수는 선택적 매개변수(optional parameters)와 함께 사용하면 유용합니다. 앞에 있는 모든 선택적 값을 제공하지 않고도 필요한 매개변수로 바로 건너뛸 수 있습니다.
public static void Configure(string host, int port = 8080, bool useSSL = false, int timeout = 30)
{
Console.WriteLine($"{host}:{port}, SSL: {useSSL}, Timeout: {timeout}");
}
// port와 useSSL을 건너뛰고 timeout만 지정
Configure("localhost", timeout: 60);
Configure("server.com", useSSL: true);위치 인수와 명명된 인수를 혼합하여 사용할 수 있지만, 위치 인수가 먼저 와야 합니다. 명명된 인수는 특히 동일한 유형의 매개변수가 여러 개 있거나 불리언(boolean) 플래그가 있는 메서드에서 가독성을 높여줍니다.
직접 해보기
using System;
using Reports;
class Program
{
public static void Main(string[] args)
{
// 세 개의 보고서 제목 읽기
string title1 = Console.ReadLine();
string title2 = Console.ReadLine();
string title3 = Console.ReadLine();
// ReportGenerator 인스턴스 생성
ReportGenerator generator = new ReportGenerator();
// TODO: 첫 번째 보고서 생성 - 제목만 사용 (모든 기본값 적용)
// TODO: 두 번째 보고서 생성 - 제목과 함께 includeSummary: true 및 maxPages: 25 사용
// (author 및 includeHeader는 건너뛰고 기본값 유지)
// TODO: 세 번째 보고서 생성 - 제목과 함께 author: "Admin", includeHeader: false, includeSummary: true 사용
// (maxPages 기본값 유지)
// 각 보고서 결과 출력
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.