Menu
Coddy logo textTech

선택적 매개변수

Coddy C# 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 70개 중 48번째.

선택적 매개변수를 사용하면 메서드 매개변수에 대한 기본값을 정의할 수 있습니다. 호출자가 해당 매개변수에 값을 제공하지 않으면 기본값이 자동으로 사용됩니다.

메서드 시그니처에서 기본값을 할당하여 선택적 매개변수를 생성할 수 있습니다:

public static void Greet(string name, string greeting = "Hello")
{
    Console.WriteLine(greeting + ", " + name + "!");
}

// 두 호출 모두 작동합니다
Greet("Alice");              // Hello, Alice!
Greet("Bob", "Welcome");     // Welcome, Bob!

선택적 매개변수는 모든 필수 매개변수 뒤에 와야 합니다. 여러 개의 선택적 매개변수를 가질 수 있으며, 호출자는 오른쪽부터 생략할 수 있습니다:

public static void CreateUser(string name, int age = 0, bool isActive = true)
{
    Console.WriteLine($"{name}, Age: {age}, Active: {isActive}");
}

CreateUser("Emma");                    // Emma, Age: 0, Active: True
CreateUser("James", 25);               // James, Age: 25, Active: True
CreateUser("Sarah", 30, false);        // Sarah, Age: 30, Active: False

기본값은 리터럴, const 값 또는 default 식과 같은 컴파일 타임 상수여야 합니다. 변수나 메서드 호출을 기본값으로 사용할 수 없습니다. 이로 인해 선택적 매개변수는 구성 설정이나 대부분의 호출자가 공통 값을 사용하는 메서드에 이상적입니다.

challenge icon

챌린지

쉬움

선택적 매개변수(optional parameters)를 사용하여 유연한 메시지 형식을 제공하는 알림 시스템을 구축해 보겠습니다. 대부분의 호출자가 합리적인 기본값을 사용하면서도, 사용자 정의 설정으로 알림을 보낼 수 있는 유틸리티 클래스를 만들 것입니다.

코드는 두 개의 파일로 구성됩니다:

  • NotificationService.cs: Notifications 네임스페이스 안에 선택적 매개변수를 사용하는 메서드를 포함한 NotificationService 클래스를 생성합니다:
    • SendNotification(string message, string priority = "Normal", bool addTimestamp = true) - 이 메서드는 형식화된 알림 문자열을 반환해야 합니다. addTimestamp가 true일 때, 메시지 앞에 [TIMESTAMP]를 붙입니다. 형식은 타임스탬프 설정에 따라 [Priority] Message 또는 [TIMESTAMP] [Priority] Message가 되어야 합니다.
  • Program.cs: 메인 파일에서 모든 기본값 사용, 하나의 매개변수 재정의, 두 개의 선택적 매개변수 모두 재정의라는 세 가지 방식으로 SendNotification을 호출하여 선택적 매개변수가 어떻게 작동하는지 보여줍니다.

세 개의 입력을 받게 됩니다:

  • 첫 번째 메시지 (모든 기본값을 사용함)
  • 두 번째 메시지 (기본 타임스탬프와 함께 "Urgent" 우선순위를 사용함)
  • 세 번째 메시지 ("Low" 우선순위를 사용하고 타임스탬프를 사용하지 않음)

SendNotification을 세 번 호출하고 각 결과를 출력하세요:

  1. 첫 번째 호출: 첫 번째 메시지만 전달 (기본값 사용: "Normal" 우선순위, 타임스탬프 활성화)
  2. 두 번째 호출: 두 번째 메시지를 "Urgent" 우선순위와 함께 전달 (타임스탬프는 여전히 기본값인 true 사용)
  3. 세 번째 호출: 세 번째 메시지를 "Low" 우선순위 및 타임스탬프에 대해 false와 함께 전달

예를 들어, 입력이 System started, Server overload, Cache cleared인 경우 출력은 다음과 같아야 합니다:

[TIMESTAMP] [Normal] System started
[TIMESTAMP] [Urgent] Server overload
[Low] Cache cleared

동일한 메서드가 세 가지 시나리오를 모두 우아하게 처리하는 방식에 주목하세요. 호출자는 기본값에서 변경해야 할 내용만 지정하면 됩니다!

치트 시트

선택적 매개변수(Optional parameters)를 사용하면 메서드 매개변수에 대한 기본값을 정의할 수 있습니다. 호출자가 값을 제공하지 않으면 기본값이 자동으로 사용됩니다.

메서드 시그니처에서 기본값을 할당하여 선택적 매개변수를 생성합니다:

public static void Greet(string name, string greeting = "Hello")
{
    Console.WriteLine(greeting + ", " + name + "!");
}

// 두 호출 모두 작동합니다
Greet("Alice");              // Hello, Alice!
Greet("Bob", "Welcome");     // Welcome, Bob!

선택적 매개변수는 모든 필수 매개변수 뒤에 와야 합니다. 여러 개의 선택적 매개변수를 가질 수 있습니다:

public static void CreateUser(string name, int age = 0, bool isActive = true)
{
    Console.WriteLine($"{name}, Age: {age}, Active: {isActive}");
}

CreateUser("Emma");                    // Emma, Age: 0, Active: True
CreateUser("James", 25);               // James, Age: 25, Active: True
CreateUser("Sarah", 30, false);        // Sarah, Age: 30, Active: False

기본값은 컴파일 타임 상수여야 합니다. 즉, 리터럴, const 값 또는 default 식이어야 합니다. 변수나 메서드 호출을 기본값으로 사용할 수 없습니다.

직접 해보기

using System;
using Notifications;

class Program
{
    public static void Main(string[] args)
    {
        // 세 개의 메시지를 읽습니다
        string message1 = Console.ReadLine();
        string message2 = Console.ReadLine();
        string message3 = Console.ReadLine();

        // NotificationService의 인스턴스를 생성합니다
        NotificationService service = new NotificationService();

        // TODO: SendNotification을 세 번 호출하고 각 결과를 출력하세요:
        // 1. 첫 번째 호출: message1만 전달 (모든 기본값 사용)
        // 2. 두 번째 호출: message2를 "Urgent" 우선순위와 함께 전달 (timestamp는 기본값 true 사용)
        // 3. 세 번째 호출: message3를 "Low" 우선순위 및 timestamp에 false를 지정하여 전달

    }
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

객체 지향 프로그래밍의 모든 레슨