Nothing 키워드(Visual Basic)
모든 데이터 형식의 기본값을 나타냅니다. 참조 형식의 경우 기본값은 null
참조입니다. 값 형식의 경우 기본값은 값 형식이 null을 허용하는지 여부에 따라 달라집니다.
참고 항목
null을 허용하지 않는 값 형식의 경우 Visual Basic의 Nothing
은 The party that generated C#의 null
과 다릅니다. Visual Basic에서 null을 허용하지 않는 값 형식의 변수를 Nothing
으로 설정하면 변수는 선언된 형식의 기본값으로 설정됩니다. C#에서는 null을 허용하지 않는 값 형식의 변수를 null
에 할당하면 컴파일 시간 오류가 발생합니다.
설명
Nothing
은 데이터 형식의 기본값을 나타냅니다. 기본값은 변수가 값 형식인지 참조 형식인지에 따라 달라집니다.
값 형식의 변수는 해당 값을 직접 포함합니다. 값 형식에는 모든 숫자 데이터 형식, Boolean
, Char
, Date
, 모든 구조체 및 모든 열거형이 포함됩니다. 참조 형식의 변수는 개체의 인스턴스에 대한 참조를 메모리에 저장합니다. 참조 형식에는 클래스, 배열, 대리자 및 문자열이 포함됩니다. 자세한 내용은 Value Types and Reference Types을 참조하세요.
변수가 값 형식인 경우 Nothing
의 동작은 변수가 널 입력 가능 데이터 형식인지 여부에 따라 달라집니다. null 허용 값 형식을 나타내려면 형식 이름에 ?
한정자를 추가합니다. null 허용 변수에 Nothing
을 할당하면 값이 null
로 설정됩니다. 자세한 내용과 예는 null 허용 값 형식을 참조하세요.
변수가 null을 허용하지 않는 값 형식인 경우 변수에 Nothing
을 할당하면 선언된 형식의 기본값으로 설정됩니다. 해당 형식에 변수 멤버가 포함되어 있으면 모두 기본값으로 설정됩니다. 다음 예에서는 스칼라 형식에 대해 이를 보여 줍니다.
Module Module1
Sub Main()
Dim ts As TestStruct
Dim i As Integer
Dim b As Boolean
' The following statement sets ts.Name to null and ts.Number to 0.
ts = Nothing
' The following statements set i to 0 and b to False.
i = Nothing
b = Nothing
Console.WriteLine($"ts.Name: {ts.Name}")
Console.WriteLine($"ts.Number: {ts.Number}")
Console.WriteLine($"i: {i}")
Console.WriteLine($"b: {b}")
Console.ReadKey()
End Sub
Public Structure TestStruct
Public Name As String
Public Number As Integer
End Structure
End Module
변수가 참조 형식인 경우 변수에 Nothing
을 할당하면 변수 형식의 null
참조로 설정됩니다. null
참조로 설정된 변수는 어떤 개체와도 연관되지 않습니다. 다음은 이에 대한 예입니다.
Module Module1
Sub Main()
Dim testObject As Object
' The following statement sets testObject so that it does not refer to
' any instance.
testObject = Nothing
Dim tc As New TestClass
tc = Nothing
' The fields of tc cannot be accessed. The following statement causes
' a NullReferenceException at run time. (Compare to the assignment of
' Nothing to structure ts in the previous example.)
'Console.WriteLine(tc.Field1)
End Sub
Class TestClass
Public Field1 As Integer
' . . .
End Class
End Module
참조(또는 null 허용 값 형식) 변수가 null
인지 확인하려면 항상 Is Nothing
또는 IsNot Nothing
을 사용합니다. = Nothing
또는 <> Nothing
은 사용하지 마세요.
Visual Basic 문자열의 경우 빈 문자열은 Nothing
과 같습니다. 따라서 "" = Nothing
은 true입니다. 이 사실은 문자열을 사용할 때 올바른 비교를 선택하는 것이 특히 중요합니다. myString = Nothing
및 myString <> Nothing
은 비어 있지 않은 값이 설정되었는지 여부를 나타내지만 이 목적으로는 String.IsNullOrEmpty(myString)
을 사용하는 것이 좋습니다. 빈 문자열을 포함한 값이 설정되었는지 확인하려면 Is Nothing
및 IsNot Nothing
을 사용합니다.
다음 예에서는 Is
및 IsNot
연산자를 사용하는 비교를 보여 줍니다.
Module Module1
Sub Main()
Dim testObject As Object
testObject = Nothing
Console.WriteLine(testObject Is Nothing)
' Output: True
Dim tc As New TestClass
tc = Nothing
Console.WriteLine(tc IsNot Nothing)
' Output: False
' Declare a nullable value type.
Dim n? As Integer
Console.WriteLine(n Is Nothing)
' Output: True
n = 4
Console.WriteLine(n Is Nothing)
' Output: False
n = Nothing
Console.WriteLine(n IsNot Nothing)
' Output: False
Console.ReadKey()
End Sub
Class TestClass
Public Field1 As Integer
Private field2 As Boolean
End Class
End Module
As
절을 사용하지 않고 변수를 선언하고 이를 Nothing
으로 설정하면 변수는 Object
형식을 갖습니다. 이러한 예는 Dim something = Nothing
과 같습니다. 이 경우 Option Strict
가 켜져 있고 Option Infer
가 꺼져 있으면 컴파일 시간 오류가 발생합니다.
개체 변수에 Nothing
을 할당하면 더 이상 개체 인스턴스를 참조하지 않습니다. 변수가 이전에 인스턴스를 참조한 경우 이를 Nothing
으로 설정해도 인스턴스 자체가 종료되지는 않습니다. GC(가비지 수집기)가 남아 있는 활성 참조가 없음을 검색한 후에만 인스턴스가 종료되고 인스턴스와 연결된 메모리 및 시스템 리소스가 해제됩니다.
Nothing
은 초기화되지 않은 변형 또는 존재하지 않는 데이터베이스 열을 나타내는 DBNull 개체와 다릅니다.
참고 항목
.NET