예외: invalidArg 함수

예외: invalidArg 함수

이번에는 F#에서 잘못된 인자(argument)가 함수에 전달됐을 때 예외를 던지는 데 쓰는 invalidArg 함수를 배워볼게요. 이름에서도 느껴지듯, "인자가 잘못됐다"는 사실을 명확하게 알려주는 예외를 만들어 줍니다.

출처: https://learn.microsoft.com/en-us/dotnet/fsharp/language-reference/exception-handling/the-invalidarg-function

본문

invalidArg 함수는 인자 예외(argument exception)를 생성해 줍니다.

구문 (Syntax)

invalidArg parameter-name error-message-string

설명 (Remarks)

위 구문에서 parameter-name은 인자가 잘못됐다고 판단된 매개변수의 이름을 담은 문자열입니다. error-message-string은 리터럴 문자열이거나 string 타입의 값이에요. 이 값은 예외 객체의 Message 속성이 됩니다.

invalidArg가 만들어 내는 예외는 System.ArgumentException 예외입니다. 아래 코드는 invalidArg로 예외를 던지는 방법을 보여줍니다.

let months = [| "January"; "February"; "March"; "April";
                "May"; "June"; "July"; "August"; "September";
                "October"; "November"; "December" |]

let lookupMonth month =
   if (month > 12 || month < 1)
     then invalidArg (nameof month) (sprintf "Value passed in was %d." month)
   months[month - 1]

printfn "%s" (lookupMonth 12)
printfn "%s" (lookupMonth 1)
printfn "%s" (lookupMonth 13)

이 코드를 실행하면 1과 12는 유효한 월이므로 JanuaryDecember가 잘 출력되지만, 13을 넘기는 호출에서는 다음과 같은 예외가 발생해요. 보다시피 nameof month 덕분에 매개변수 이름(month)까지 예외 메시지에 함께 담겨 나옵니다.

December
January
System.ArgumentException: Value passed in was 13. (Parameter 'month')

더 알아보기 (Learn more)