C#의 명명된 매개변수(Named Parameters)는 메서드를 호출할 때 매개변수의 순서를 외우거나 일일이 확인해야 하는 번거로움을 덜어주는 기능입니다. 호출하는 쪽에서 각 인수(argument)가 어떤 매개변수에 해당하는지 매개변수 이름으로 직접 지정할 수 있습니다.
NamedParameterFunction(firstName: "Hello", lastName: "World")
명명된 매개변수의 핵심 특징
명명된 매개변수를 사용하면 이름만 정확히 일치한다면 어떤 순서로든 인수를 전달할 수 있습니다. 컴파일러는 인수의 이름을 기준으로 올바른 변수에 값을 자동으로 매핑해 주기 때문입니다. 단, 인수 이름은 반드시 메서드 정의에 선언된 매개변수 이름과 일치해야 합니다.
또한 명명된 인수는 각 값이 어떤 의미를 가지는지 코드상에서 명확하게 드러내기 때문에 코드의 가독성을 크게 향상시킵니다. 특히 매개변수가 많은 메서드나 선택적 매개변수(optional parameters)와 함께 사용할 때 그 진가를 발휘합니다.
예제 코드
using System;
namespace DemoApplication{
class Demo{
static void Main(string[] args){
NamedParameterFunction("James", "Bond");
NamedParameterFunction(firstName:"Mark", lastName:"Wood");
NamedParameterFunction(lastName: "Federer", firstName: "Roger");
Console.ReadLine();
}
public static void NamedParameterFunction(string firstName, string lastName){
Console.WriteLine($"FullName: {firstName} {lastName}");
}
}
}실행 결과
위 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.
FullName: James Bond FullName: Mark Wood FullName: Roger Federer
코드 분석
위 예제에서 세 가지 호출 방식을 살펴볼 수 있습니다.
- 일반적인 위치 기반 호출:
NamedParameterFunction("James", "Bond")처럼 이름 없이 순서대로 전달하는 전통적인 방식입니다. - 순서를 유지한 명명된 호출:
NamedParameterFunction(firstName:"Mark", lastName:"Wood")처럼 원래 순서대로 이름을 붙여 전달한 경우입니다. - 순서를 바꾼 명명된 호출:
NamedParameterFunction(lastName: "Federer", firstName: "Roger")처럼 매개변수 순서를 뒤바꿔 전달한 경우입니다.
주목할 점은 마지막 호출입니다. 매개변수가 선언된 순서와 다르게 전달되었음에도 불구하고, 명명된 매개변수를 사용했기 때문에 각 값이 이름을 기준으로 올바른 변수에 매핑됩니다. 그 결과 예상대로 "Roger Federer"라는 출력이 정상적으로 나타납니다.
정리
명명된 매개변수는 C# 4.0부터 도입된 기능으로, 다음과 같은 상황에서 특히 유용합니다.
- 매개변수가 많은 메서드를 호출할 때 실수를 방지하고 싶은 경우
- 선택적 매개변수 중 필요한 것만 골라서 값을 지정하고 싶은 경우
- 호출 코드만 보고도 각 인수의 의미를 파악할 수 있도록 가독성을 높이고 싶은 경우
단, 인수 이름은 메서드 시그니처의 매개변수 이름과 반드시 일치해야 하므로, 메서드의 매개변수 이름을 변경하면 호출부 코드도 함께 수정해야 한다는 점을 유의해야 합니다.