Notice
Recent Posts
Recent Comments
Link
관리 메뉴

nomad-programmer

[Programming/C#] 선택적 매개 변수 본문

Programming/C#

[Programming/C#] 선택적 매개 변수

scii 2020. 9. 7. 18:40

메소드의 매개 변수는 기본 값을 가질 수 있다. 기본 값을 가지는 매개 변수는 필요에 따라 데이터를 할당하거나 할당하지 않을 수 있기 때문에 이를 "선택적 매개 변수 (Optional Parameter)" 라고 부른다.

선택적 매개 변수는 메소드의 사용자에게 사용하지 않는 매개 변수를 염두에 두지 않도록 편의를 제공하지만, 또 한편으로는 모호함이라는 스트레스도 같이 준다. 코드를 작성할 때는 자동 완성의 도움을 받아 어느 매개 변수에 데이터를 할당하는지 파악할 수 있지만, 작성한 지 한참이 지난 코드를 다시 들려다 보면 어느 코드에 데이터를 할당했는지 분간이 잘 안될 때도 있다. 매개 변수의 수가 많고 여기에 선택적 매개 변수도 여럿 포함되면 더 헛갈려진다. 이런 경우 명명된 매개 변수의 도움을 받으면 쉽게 문제를 풀 수 있다.

using System;

namespace CSharpExample
{
    class OptionalExample
    {
        static void PrintProfile(string name, string phone = "")
        {
            Console.WriteLine($"name: {name}, phone: {phone}");
        }

        static int Main(string[] args)
        {
            PrintProfile("hehe");
            PrintProfile("hoho", "123444");
            PrintProfile(name: "huhu");
            PrintProfile(name: "haha", phone: "000-0000-0000");

            return 0;
        }
    }
}

/* 결과

name: hehe, phone:
name: hoho, phone: 123444
name: huhu, phone:
name: haha, phone: 000-0000-0000

*/

 

메소드 오버로딩 VS 선택적 매개 변수

선택적 매개 변수는 상당히 유용한 기능임에 틀림없지만, 메소드 오버로딩과 함께 사용될 때 혼란을 야기할 수 있다. 예를 들면 다음과 같다.

void MyMethod(string arg0 = "", string arg1 = "")
{
    Console.WriteLine('A');
}

void MyMethod()
{
    Console.WriteLine('B');
}

만약 MyMethod() 를 호출했다고 생각해보자. 그러면 "B"가 출력될 것이다. 어느 것이 출력됐건 상관없다. 이 코드는 잘못된 코드이기 때문이다.

오버로딩을 할지 아니면 선택적 매개 변수를 사용할지를 프로그래머가 정책적으로 정하는 것이 필요하다. 

논리는 동일하되 매개 변수가 다른 경우는 선택 매개 변수를 사용하고, 매개 변수에 따라 논리도 함께 달리지는 경우에는 오버로딩을 사용하는 식으로 말이다.

Comments