25. 함수 - 매개 변수

ChoiJyun·2023년 10월 24일
post-thumbnail

📌 디폴트 매개변수

매개 변수도 디폴트 값을 설정할 수 있다.
즉, 함수를 호출할 때 디폴트 값이 설정되어있는 매개 변수는 인자를 따로 받지 않아도 오류가 나지 않는다.

// 정의된 함수
static void PrintColor(string x_Color, string y_Color, int x = 1, int y = 2) 
{
    Console.WriteLine($"{x} : {x_Color}");
    Console.WriteLine($"{y} : {y_Color}");
}

PrintColor함수의 x와 y는 디폴트 매개 변수가 선언된 매개 변수이다.
즉, 메인 함수에서 PrintColor함수를 호출할 때 x와 y에 따로 인자를 전달하지 않아도 된다는 뜻이다.

// 메인 함수
static void Main(string[] args)
{
    PrintColor("red", "white");
    Console.WriteLine("----------------");
    PrintColor("blue", "orange", 3, 4);
}
[출력]
1 : red
2 : white
----------------
3 : blue
4 : orange

📖 디폴트 매개변수의 주의점

디폴트 매개변수를 선언할때는 반드시 맨 뒤에 있는 매개 변수부터 차례대로 선언해야 한다는 것이다.

static void error1 (string x_Color, string y_Color, int x = 1, int y)
static void error2 (string x_Color = "red", string y_Color, int x , int y)
static void error3 (string x_Color = "blue", string y_Color, int x = 1, int y = 2)

위 3개의 함수는 모두 잘못된 함수이다.
디폴트 매개변수가 맨 뒤에서부터 차례대로 선언되지 않았기 때문이다.

📖 명명된 인수

위 PrintColor 함수를 호출할때 y만 3으로 바꾸어서 호출한다고 가정해보자.

PrintColor("red", "white", 1, 3);

위와 같이 호출할 수 있지만 효율적인 방법이 아니다.
이미 1이라는 디폴트 값으로 초기화 되어 있는 x에 또 다시 1을 인자로 전달하기 때문이다.
이럴때 쓰는 것이 명명된 인수이다.

PrintColor("red", "white", y : 3);

이와 같이 인자를 전달할때 전달한 인자를 앞에 표시해준다.
디폴트 매개변수를 배우기 전까지는 함수에 정의되어 있는 매개변수를
모두 인자로 전달해 줘야 했기 때문에 명명된 인수를 쓸 필요가 없었지만
디폴트 매개변수를 쓸때는 알아두면 좋은 개념이다.

📖 params 키워드

함수는 당연하게도 배열을 인자로 받을 수 있다.
배열을 인자로 받는 함수를 살펴보자.

// 정의된 함수
static void PrintColorArray( string[] Color )
{
    for ( int i = 0; i < Color.Length; i++ )
    {
        Console.WriteLine($" {i} : {Color[i]}" );
    }
}

// 메인 함수
static void Main(string[] args)
{
    PrintColorArray(new string[] { "blue", "white" });
}
[출력]
0 : blue
1 : white

PrintColorArray함수는 인자로 Color라는 배열의 인덱스에 해당하는 데이터값을 받는다.
그 이후 for문을 통해 출력을 해주는 기능을 가진 함수이다.
그렇다면 메인 함수에서 인자를 전달할 때,
보기 쉽게 인덱스에 해당하는 데이터 값만을 전달하는 방법은 없을까?
그것을 가능하게 해주는 것이 바로 params 키워드이다.

// 정의된 함수
static void PrintColorArray( params string[] Color )
{
    for ( int i = 0; i < Color.Length; i++ )
    {
        Console.WriteLine($" {i} : {Color[i]}" );
    }
}

// 메인 함수
static void Main(string[] args)
{
    PrintColorArray("blue", "white");
}
[출력]
0 : blue
1 : white

params키워드는 배열을 인자로 받는 함수의 확장된 개념이다.

profile
개발자 도전기

0개의 댓글