Nullable 값 형식(Visual Basic)
특정 상황에서 정의된 값이 없는 값 형식으로 작업하는 경우가 있습니다. 예를 들어 데이터베이스의 필드는 의미 있는 할당된 값이 있고 할당된 값이 없는 경우를 구분해야 할 수 있습니다. 값 형식은 정규 값 또는 null 값을 사용하도록 확장할 수 있습니다. 이러한 확장을 null 허용 형식이라고 합니다.
각 null 허용 값 형식은 제네릭 Nullable<T> 구조체에서 생성됩니다. 작업 관련 활동을 추적하는 데이터베이스를 고려합니다. 다음 예제에서는 null 허용 Boolean
형식을 생성하고 해당 형식의 변수를 선언합니다. 다음 세 가지 방법으로 선언을 작성할 수 있습니다.
Dim ridesBusToWork1? As Boolean
Dim ridesBusToWork2 As Boolean?
Dim ridesBusToWork3 As Nullable(Of Boolean)
변수 ridesBusToWork
는 True
의 값, False
의 값을 보유하거나 값이 전혀 없을 수 있습니다. 초기 기본값은 전혀 값이 아니며, 이 경우 이 사용자에 대한 정보를 아직 얻지 못했음을 의미할 수 있습니다. 대조적으로, False
은 정보를 얻고 사람이 출근하기 위해 버스를 타지 않는다는 것을 의미 할 수 있습니다.
null 허용 값 형식을 사용하여 변수 및 속성을 선언할 수 있으며 null 허용 값 형식의 요소를 사용하여 배열을 선언할 수 있습니다. null 허용 값 형식을 매개 변수로 사용하여 프로시저를 선언할 수 있으며 Function
프로시저에서 null 허용 값 형식을 반환할 수 있습니다.
배열, String
, 클래스와 같은 참조 형식에서 null 허용 형식을 생성할 수 없습니다. 기본 형식은 값 형식이어야 합니다. 자세한 내용은 Value Types and Reference Types을 참조하세요.
Null 허용 형식 변수 사용
null 허용 값 형식의 가장 중요한 멤버는 해당 HasValue 및 Value 속성입니다. null 허용 값 형식의 변수의 경우 HasValue은 변수에 대해 정의된 값이 포함되어 있는지 여부를 알려줍니다. HasValue이 True
인 경우 Value에서 값을 읽을 수 있습니다. HasValue과 Value 둘 다 ReadOnly
속성입니다.
기본값
null 허용 값 형식으로 변수를 선언하면 해당 HasValue 속성의 기본값은 False
입니다. 즉, 기본적으로 변수에는 기본 값 형식의 기본값 대신 정의된 값이 없습니다. 다음 예제에서는 Integer
형식의 기본값이 0인 경우에도 변수 numberOfChildren
에 처음에는 정의된 값이 없습니다.
Dim numberOfChildren? As Integer
null 값은 정의되지 않거나 알 수 없는 값을 나타내는 데 유용합니다. numberOfChildren
이 Integer
로 선언된 경우 현재 정보를 사용할 수 없음을 나타낼 수 있는 값이 없습니다.
값 저장
일반적으로 null 허용 값 형식의 변수 또는 속성에 값을 저장합니다. 다음 예제에서는 이전 예제에서 선언된 변수 numberOfChildren
에 값을 할당합니다.
numberOfChildren = 2
null 허용 값 형식의 변수 또는 속성에 정의된 값이 포함된 경우 값이 할당되지 않은 초기 상태로 되돌릴 수 있습니다. 다음 예제와 같이 변수 또는 속성을 Nothing
로 설정하여 이 작업을 수행합니다.
numberOfChildren = Nothing
참고 항목
Nothing
을 null 허용 값 형식의 변수에 할당할 수 있지만 등호를 사용하여 Nothing
에 대해 테스트할 수는 없습니다. 등호를 사용하는 비교, someVar = Nothing
는 항상 Nothing
로 계산됩니다. 변수의 HasValue 속성을 False
테스트하거나 Is
또는 IsNot
연산자를 사용하여 테스트할 수 있습니다.
값 검색
null 허용 값 형식의 변수 값을 검색하려면 먼저 해당 HasValue 속성을 테스트하여 값이 있는지 확인해야 합니다. HasValue이 False
일 때 값을 읽으려고 하면 Visual Basic에서 InvalidOperationException 예외가 throw됩니다. 다음 예제에서는 이전 예제의 numberOfChildren
변수를 읽는 권장 방법을 보여 줍니다.
If numberOfChildren.HasValue Then
MsgBox("There are " & CStr(numberOfChildren) & " children.")
Else
MsgBox("It is not known how many children there are.")
End If
Null 허용 형식 비교
부울 식에서 null 허용 Boolean
변수를 사용하는 경우 결과는 True
, False
, Nothing
가 될 수 있습니다. 다음은 And
및 Or
에 대한 진리 테이블입니다. b1
및 b2
는 이제 세 개의 가능한 값이 있으므로 평가할 9개의 조합이 있습니다.
b1 | b2 | b1 및 b2 | b1 또는 b2 |
---|---|---|---|
Nothing |
Nothing |
Nothing |
Nothing |
Nothing |
True |
Nothing |
True |
Nothing |
False |
False |
Nothing |
True |
Nothing |
Nothing |
True |
True |
True |
True |
True |
True |
False |
False |
True |
False |
Nothing |
False |
Nothing |
False |
True |
False |
True |
False |
False |
False |
False |
부울 변수 또는 식의 값이 Nothing
인 경우 true
도 아니고 false
도 아닙니다. 아래 예제를 고려해 보세요.
Dim b1? As Boolean
Dim b2? As Boolean
b1 = True
b2 = Nothing
' The following If statement displays "Expression is not true".
If (b1 And b2) Then
Console.WriteLine("Expression is true")
Else
Console.WriteLine("Expression is not true")
End If
' The following If statement displays "Expression is not false".
If Not (b1 And b2) Then
Console.WriteLine("Expression is false")
Else
Console.WriteLine("Expression is not false")
End If
이 예제에서 b1 And b2
은 Nothing
로 평가됩니다. 결과적으로 Else
절은 각 If
문에서 실행되고 출력은 다음과 같습니다.
Expression is not true
Expression is not false
참고 항목
단락 평가를 사용하는 AndAlso
와 OrElse
는 첫 번째 피연산자를 Nothing
으로 계산할 때 두 번째 피연산자를 계산해야 합니다.
전파
산술, 비교, 시프트, 형식 연산의 피연산자 중 하나 또는 둘 다 null 허용 값 형식인 경우 작업의 결과는 null 허용 값 형식이기도 합니다. 두 피연산자 모두 값이 Nothing
이 아닌 경우 연산은 null 허용 값 형식이 아닌 것처럼 피연산자의 기본 값에 대해 수행됩니다. 다음 예제에서는 compare1
과 sum1
변수를 암시적으로 입력합니다. 마우스 포인터를 놓으면 컴파일러가 둘 다에 대해 null 허용 값 형식을 유추하는 것을 볼 수 있습니다.
' Variable n is a nullable type, but both m and n have proper values.
Dim m As Integer = 3
Dim n? As Integer = 2
' The comparison evaluated is 3 > 2, but compare1 is inferred to be of
' type Boolean?.
Dim compare1 = m > n
' The values summed are 3 and 2, but sum1 is inferred to be of type Integer?.
Dim sum1 = m + n
' The following line displays: 3 * 2 * 5 * True
Console.WriteLine($"{m} * {n} * {sum1} * {compare1}")
하나 또는 두 피연산자의 값이 Nothing
이 있는 경우 결과는 Nothing
가 됩니다.
' Change the value of n to Nothing.
n = Nothing
Dim compare2 = m > n
Dim sum2 = m + n
' Because the values of n, compare2, and sum2 are all Nothing, the
' following line displays: 3 * <null> * <null> * <null>
Console.WriteLine($"{m} * {If(n, "<null>")} * {If(sum2, "<null>")} * {If(compare2, "<null>")}")
데이터와 함께 Null 허용 형식 사용
데이터베이스는 null 허용 값 형식을 사용하는 가장 중요한 위치 중 하나입니다. 현재 모든 데이터베이스 개체가 null 허용 값 형식을 지원하지는 않지만 디자이너에서 생성된 테이블 어댑터는 지원합니다. Null 허용 형식에 대한 TableAdapter 지원을 참조하세요.
참고 항목
.NET