본문 바로가기
시행착오 스토리/C#

C# 4.0 필수 매개변수 및 선택적 매개변수

by 양벨라 2017. 8. 30.

C# 4.0 필수 매개변수 및 선택적 매개변수


4.0에 새로 추가된 기능이라고 한다. 기존에는 매개변수가 1개 일 경우, 2개일 경우 어떤 매개변수를 이용하느냐에 따라 오버로딩 하면서 사용했다. 어떤 것을 예제로 사용할지 고민하다가 Account를 생성하는 부분을 코드로 짜기로 했다. Create라는 함수가 1. 이름, 2. 이름+폰번호, 3. 이름+폰번호+주소 이렇게 세가지 방법으로 인수를 넘겼을 때 동작하려면 우리는 아래의 코드처럼 오버로딩을 이용했다.

[1] 기존의 오버로딩 기법

/*Account.cs*/
class Program
{
  class Account
  {
    public string Name {get; set;}
    public string PhoneNum {get; set;}
    public string Address {get; set;}
    public Account(string name, string phoneNum, string address)
    {
      this.Name = Name;
      this.PhoneNum = PhoneNum;
      this.Address = address;
    }
  }

  class AccountBook
  {
    public List Accounts {get; set;}
    public AccountBook()
    {
      Accounts = new List();
    }
    public void Create(string name, string phonenum, string address)
    {
      Account account = new Account(name, phonenum, address);
      this.Accounts.Add(account);
    }
    public void Create(string name, string phonenum)
    {
      this.Create(name, phonenum, "None");
    }
    public void Create(string name)
    {
      this.Create(name, "None", "None");
      Console.WriteLine("The information is short");
    }
    public void Display()
     {
       Console.WriteLine("This is AccountBook");
       Console.WriteLine("-----------------------------------------------");
       foreach (var res in Accounts)
        {
          Console.WriteLine("Name: {0} | PhoneNum: {1} | Address: {2}", res.Name, res.PhoneNum, res.Address);
          Console.WriteLine("-----------------------------------------------");
         }
      }
  }

  static void Main(string[] args)
  {
    AccountBook book = new AccountBook();
    book.Create("YHJ","1004","dearjiya");
    book.Create("JHR","0214");
    book.Create("YHW");
    book.Display();
    Console.WriteLine("Perfect!");
    Console.ReadLine();
  }
}

현재 AccountBook 클래스에는 Create라는 함수가 있는데 매개변수에 따라 재선언하여 오버로딩 해둔 것을 볼 수 있다. C#을 만나기 전까지는 나도 오버로딩을 하여 사용하기도 했고 함수명에 따라 구분하기도 했다. 하지만 C# 4.0의 이 기능은 아주 유용하다.


C++에도 default 매개변수가 있고 이는 매개변수가 전달되지 않을 때 그 매개변수를 대신하기 위한 기본값이 설정되어 있고 이를 사용하겠다는 개념이있다.


↓ ↓ ↓ [1] 출력 결과



[2] 선택 매개변수를 이용한 기법

public void Create(string name, string phonenum="", string address="")
{
  Account account = new Account(name, phonenum, address);
  this.Accounts.Add(account);
}

- 오버로딩 된 부분을 지우고 하나의 함수를 선언한 후 필수로 하고 싶은 매개변수는 그대로 두고, 선택하고 싶은 매개변수는 어떤 값을 지정해서 선언하면 된다. 다만 무조건 필수 매개변수를 가져야 하는 것은 아니지만, 필수와 선택을 모두 선언하고 싶다면 무조건 필수 뒤에 선택을 선언해주어야 한다.
- 선택 매개변수를 순서대로 지정할 필요는 없다.


↓ ↓ ↓ [2] 출력 결과



결과는 동일하다.


[3] 매개변수 명을 지정하여 넘기거나
[4] 매개변수의 순서를 바꾸고 싶을 경우

/*Account.cs*/
public void Create(string name, string phonenum="", string address="")
{
  Account account = new Account(name, phonenum, address);
  this.Accounts.Add(account);
}
static void Main(string[] args)
{
  AccountBook book = new AccountBook();
  book.Create("YHW", address:"Busan");     //[3] phonenum을 따로 넘기지 않고, 다음 매개변수인 address에 직접 "Busan"을 줌
  book.Create("YHJ", address:"1004", phonenum: "dearjiya"); //[4] address와 phonenum의 순서를 바꾸어 각각 넘김
  book.Display();
  Console.WriteLine("Perfect!");
  Console.ReadLine();
}


↓ ↓ ↓ [3][4] 출력 결과