Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 선택적 매개변수(Optional Parameter)란? 기본값과 [Optional] 특성 사용법

기본적으로 메서드의 모든 매개변수는 필수입니다. 하지만 선택적 매개변수(Optional Parameter)를 포함한 메서드는 호출 시 인수를 반드시 전달하지 않아도 됩니다. 즉, 일부 인수를 생략한 채로 메서드를 호출할 수 있습니다.

선택적 매개변수는 함수 정의 시점에 기본값(default value)을 가집니다. 호출 시 해당 인수를 전달하지 않으면 기본값이 사용되고, 값을 전달하면 기본값 대신 전달된 값이 적용됩니다.

C#에서 매개변수를 선택적으로 만드는 방법은 크게 두 가지가 있습니다.

1. 기본값(Default Value) 사용하기

매개변수 선언 시 등호(=)와 함께 기본값을 지정하면 해당 매개변수는 선택적이 됩니다.

예제

using System;
namespace DemoApplication{
    class Demo{
        static void Main(string[] args){
            OptionalMethodWithDefaultValue(5);
            // value2는 선택적이므로 전달하지 않음
            OptionalMethodWithDefaultValue(5, 10);
            // value2를 직접 전달
            Console.ReadLine();
        }
        public static void OptionalMethodWithDefaultValue(int value1, int value2 = 5){
            Console.WriteLine($"Sum is {value1 + value2}");
        }
    }
}

출력 결과

Sum is 10
Sum is 15

위 예제에서 OptionalMethodWithDefaultValue(int value1, int value2 = 5) 메서드의 value2는 기본값 5를 가지고 있습니다. 따라서 호출 시 value2에 대한 인수를 전달하지 않으면 기본값 5가 사용되고(5 + 5 = 10), 인수를 전달하면 기본값이 무시되고 전달된 값이 적용됩니다(5 + 10 = 15).

2. [Optional] 특성(Attribute) 사용하기

System.Runtime.InteropServices 네임스페이스의 [Optional] 특성을 사용하면 기본값 없이도 매개변수를 선택적으로 만들 수 있습니다.

예제

using System;
using System.Runtime.InteropServices;
namespace DemoApplication{
    class Demo{
        static void Main(string[] args){
            OptionalMethodWithDefaultValue(5);
            OptionalMethodWithDefaultValue(5, 10);
            Console.ReadLine();
        }
        public static void OptionalMethodWithDefaultValue(int value1, [Optional]int value2){
            Console.WriteLine($"Sum is {value1 + value2}");
        }
    }
}

출력 결과

Sum is 5
Sum is 15

여기서는 [Optional] 특성을 사용하여 value2를 선택적 매개변수로 지정했습니다. 주의할 점은 이 방식으로 선언된 매개변수에 값이 전달되지 않으면 해당 타입의 기본값(예: int의 경우 0)이 할당된다는 것입니다. 그래서 첫 번째 호출 결과가 "Sum is 5"로 출력됩니다.

선택적 매개변수의 위치 규칙

선택적 매개변수는 반드시 매개변수 목록의 맨 뒤에 위치해야 합니다. 필수 매개변수보다 앞에 선언하면 컴파일 오류가 발생합니다.

잘못된 예제

using System;
namespace DemoApplication{
    class Demo{
        static void Main(string[] args){
            OptionalMethodWithDefaultValue(5);
            OptionalMethodWithDefaultValue(5, 10);
            Console.ReadLine();
        }
        public static void OptionalMethodWithDefaultValue(int value1 = 5, int value2){
            Console.WriteLine($"Sum is {value1 + value2}");
        }
    }
}

오류 메시지 − 선택적 매개변수는 모든 필수 매개변수 뒤에 나타나야 합니다.(Optional Parameters must appear after all required parameters.)

위 코드처럼 선택적 매개변수 value1 = 5가 필수 매개변수 value2보다 먼저 선언되면 컴파일러가 오류를 발생시킵니다. 따라서 메서드를 설계할 때는 항상 필수 매개변수를 먼저, 선택적 매개변수를 나중에 배치해야 합니다.