Null 값(F#)

이 항목에서는 F#의 null 값 사용 방식을 설명합니다.

Null 값

null 값은 F#의 경우 값이나 변수에 일반적으로 사용되지 않습니다. 그러나 상황에 따라서는 비정상적인 값으로 null이 표시되기도 합니다. F#에서 정의된 형식에 대해서는 AllowNullLiteral 특성이 적용된 경우를 제외하고는 일반 값으로 null을 사용할 수 없습니다. 그러나 다른 .NET 언어에서 형식을 정의하는 경우에는 null을 값으로 사용할 수 있으며, 이러한 형식과의 상호 작용이 필요할 때는 F# 코드에서 null 값이 발생할 수도 있습니다.

F#에서 정의하고 F#에서만 사용하는 형식에 대해 F# 라이브러리를 직접 사용하여 null 값을 만들려면 Unchecked.defaultof 또는 Array.zeroCreate를 사용해야 합니다. 그러나 F# 형식을 다른 .NET 언어에서 사용하거나 .NET Framework 같이 F#으로 작성하지 않은 API에서 해당 형식을 사용하는 경우에는 null 값이 발생할 수 있습니다.

다른 .NET 언어에서 null 값이 사용될 자리에 참조 변수를 사용해야 할 상황이 발생하면 F#에서 option 형식을 사용할 수 있습니다. null 대신 F# option 형식을 사용하는 경우 개체가 없으면 옵션 값으로 None을 사용합니다. 개체가 있으면 개체 obj와 함께 옵션 값 Some(obj)을 사용합니다. 자세한 내용은 옵션(F#)을 참조하십시오.

null 키워드는 F# 언어의 유효한 키워드이며, .NET Framework API 또는 다른 .NET 언어로 작성된 기타 API를 다룰 때는 이 키워드를 사용해야 합니다. null 값이 필요할 수 있는 두 가지 상황으로는 .NET API를 호출하고 null 값을 인수로 전달하려는 경우와 .NET 메서드 호출의 반환 값 또는 출력 매개 변수를 해석하려는 경우가 있습니다.

.NET 메서드에 null 값을 전달하려면 호출 코드에 null 키워드를 사용하면 됩니다. 다음 코드 예제에서는 그 구체적인 방법을 보여 줍니다.

open System

// Pass a null value to a .NET method.
let ParseDateTime (str: string) =
    let (success, res) = DateTime.TryParse(str, null, System.Globalization.DateTimeStyles.AssumeUniversal)
    if success then
        Some(res)
    else
        None

.NET 메서드로부터 얻은 null 값을 해석해야 할 때 패턴 일치 방법을 사용할 수 있으면 패턴 일치를 사용합니다. 다음 코드 예제에서는 입력 스트림의 마지막 지점을 지나서까지 데이터를 읽으려 시도할 때 ReadLine으로부터 반환되는 null 값을 해석하기 위해 패턴 일치를 사용하는 방법을 보여 줍니다.

// Open a file and create a stream reader.
let fileStream1 =
    try
        System.IO.File.OpenRead("TextFile1.txt")
    with 
        | :? System.IO.FileNotFoundException -> printfn "Error: TextFile1.txt not found."; exit(1)

let streamReader = new System.IO.StreamReader(fileStream1)

// ProcessNextLine returns false when there is no more input;
// it returns true when there is more input.
let ProcessNextLine nextLine =
    match nextLine with
    | null -> false
    | inputString ->
        match ParseDateTime inputString with
        | Some(date) -> printfn "%s" (date.ToLocalTime().ToString())
        | None -> printfn "Failed to parse the input."
        true

// A null value returned from .NET method ReadLine when there is
// no more input.
while ProcessNextLine (streamReader.ReadLine()) do ()

F# 형식의 Null 값은 Array.zeroCreate를 사용하여 Unchecked.defaultof를 호출하는 등과 같은 다른 방법으로도 생성할 수 있습니다. 이와 같은 코드를 다룰 때는 null 값이 계속 캡슐화되도록 주의를 기울여야 합니다. F# 전용 라이브러리에서는 모든 함수에 대해 null 값을 확인하지 않아도 됩니다. 그러나 다른 .NET 언어와 상호 운용이 가능한 라이브러리를 작성하는 경우에는 C# 또는 Visual Basic 코드에서와 마찬가지로 null 입력 매개 변수에 대한 검사를 추가하고 ArgumentNullException을 throw해야 할 수도 있습니다.

임의의 값이 null인지 확인하려면 다음 코드를 사용하면 됩니다.

match box value with
| null -> printf "The value is null."
| _ -> printf "The value is not null."

참고 항목

참조

일치 식(F#)

기타 리소스

값(F#)