🔥 기본 값 지정하기

307자
4분

Swift Argument Parser를 사용할 때 대부분의 인자, 옵션, 플래그 타입에 대해 기본값을 지정할 수 있습니다. 일반적인 프로퍼티 초기화 구문을 활용하면 됩니다. 예제 코드를 한번 살펴볼게요.

enum CustomFlag: String, EnumerableFlag {
    case foo, bar, baz
}
 
struct Example: ParsableCommand {
    @Flag
    var booleanFlag = false // Boolean 플래그의 기본값은 false로 설정
 
    @Flag
    var arrayFlag: [CustomFlag] = [.foo, .baz] // 배열 플래그의 기본값은 [.foo, .baz]로 초기화
 
    @Option
    var singleOption = 0 // 단일 옵션의 기본값은 0으로 지정
 
    @Option
    var arrayOption = ["bar", "qux"] // 배열 옵션의 기본값은 ["bar", "qux"]로 할당
 
    @Argument
    var singleArgument = "quux" // 단일 인자의 기본값은 "quux"로 설정
 
    @Argument
    var arrayArgument = ["quux", "quuz"] // 배열 인자의 기본값은 ["quux", "quuz"]로 초기화
}
 
swift

위의 예제 코드에서는 @Flag, @Option, @Argument 등의 프로퍼티 래퍼를 사용하여 인자, 옵션, 플래그를 선언하고 있죠. 그리고 각 프로퍼티마다 기본값을 할당하고 있어요.

booleanFlagBool 타입의 플래그로, 기본값으로 false를 지정했습니다. arrayFlagCustomFlag 열거형 타입의 배열 플래그이며, 기본값으로 [.foo, .baz]를 할당했습니다.

singleOptionInt 타입의 단일 옵션이고 기본값은 0으로 설정되어 있습니다. arrayOptionString 배열 타입의 옵션인데 ["bar", "qux"]를 기본값으로 가지고 있군요.

singleArgumentarrayArgument는 각각 String 타입의 단일 인자와 String 배열 타입의 인자입니다. 기본값으로는 "quux"["quux", "quuz"]가 할당되어 있네요.

이렇게 다양한 타입의 인자, 옵션, 플래그에 기본값을 지정할 수 있습니다. 기본값이 설정되면 사용자가 해당 값을 명시적으로 제공하지 않아도 자동으로 기본값이 사용되겠죠?

하지만 주의해야 할 점이 있습니다:

  1. Optional 타입의 값은 기본값을 지정할 수 없습니다. Optional은 이미 nil로 초기화되기 때문에 기본값을 설정하는 것이 의미가 없거든요.
  2. Int 타입의 플래그도 기본값을 지정할 수 없습니다. 이 플래그는 플래그가 지정된 횟수를 카운팅하는 데 사용되므로 항상 0으로 초기화됩니다.

만약 기본값을 지정하지 않으면 사용자는 반드시 해당 인자/옵션/플래그에 대한 값을 제공해야 합니다. 그렇지 않으면 값이 누락되었다는 오류가 발생할 거예요.

그리고 옵셔널이 아닌 Bool 타입의 플래그는 위 예제처럼 항상 false로 초기화해야 한다는 점도 잊지 마세요. 이렇게 하면 structclass를 초기화할 때 명시적으로 초기화하거나 옵셔널로 선언해야 하는 일반적인 Swift 프로퍼티의 동작과 일관성을 유지할 수 있습니다.