HOWTO · Python
파이썬 NULL
이 자습서에서는 Python의 NULL에 대해 설명합니다.
이 페이지의 내용
Python에는 NULL이라는 키워드가 없습니다. Python에서 이에 해당하는 값은 내장 싱글턴인 None이며, 선택적 값이나 아직 설정되지 않은 객체 참조를 나타낼 때 흔히 사용합니다. value is None으로 해당 값을 확인할 수 있습니다. None은 타입이 NoneType인 값이며 숫자 0이 아닙니다. Python 코드에서는 C 스타일 포인터를 할당하지 않습니다. 다른 언어에서 NULL은 각 언어만의 의미를 가지므로, 언어가 달라도 NULL 값의 동작이 같다고 가정하지 마세요.
Python 값이 None인지 확인하기
일반적으로 is 항등 연산자를 사용해 확인합니다. 이 연산자는 양쪽이 같은 객체를 가리키는지 검사하므로, value is None은 Python의 싱글턴을 확인하는 명확한 방법입니다. 같은 작업을 다루는 Python 변수가 None인지 확인하는 가이드도 참고할 수 있습니다.
다음의 독립 실행형 예제를 실행해 보세요.
values = [None, "ready"]
for value in values:
if value is None:
print("value is None")
else:
print("value is set")
value is None
value is set
is 검사는 None 값과 문자열을 구분합니다. 두 분기를 함수 인수, 조회 결과 또는 선택적 필드에 적용할 수도 있습니다. 예시 값을 프로그램에서 확인하려는 변수로 바꾸세요.
value == None은 일반적으로 권장되는 형식이 아닙니다. 객체 클래스가 동등성 비교를 사용자 정의할 수 있으므로, 이 표현이 “이 값이 None 싱글턴인가?”라는 뜻이라고 보장할 수 없습니다. 일반 값의 내용을 비교할 때는 동등성 비교를 사용하고, None을 확인할 때는 항등성을 사용하세요. 이렇게 하면 0, False, ""처럼 거짓으로 평가되는 다른 값도 None으로 잘못 취급하지 않습니다.
Python에서 None의 타입 확인하기
None 값의 타입을 확인하려면 내장 함수 type()에 전달하세요. 반환되는 클래스의 이름은 NoneType입니다. None은 싱글턴 값이고 NoneType은 그 값의 타입입니다. 일반적인 코드에서는 타입을 확인하는 것보다 항등성 검사가 더 명확하지만, type()은 Python 객체를 살펴보거나 진단 출력을 읽을 때 유용할 수 있습니다.
다음의 짧은 예제는 Python의 전체 클래스 표현 대신 클래스 이름을 출력합니다.
value = None
print(type(value).__name__)
NoneType
이 내장 값의 이름은 NoneType입니다. None 자체를 데이터 타입이라고 설명하지 마세요. None은 해당 타입을 가진 객체입니다. 또한 직접적인 value is None 검사를 대신해 type(value) is type(None)을 사용하지 마세요. 전자가 확인하려는 내용을 더 명확하게 표현합니다.
Python에서 None으로 존재하지 않는 객체 참조 표현하기
Python 변수는 객체를 참조하지만, Python 코드는 할당 가능한 C 스타일 포인터를 노출하지 않습니다. None은 아직 설정되지 않은 선택적 참조를 나타낼 때 흔히 사용됩니다. 예를 들어 다른 노드를 연결하기 전까지 노드의 자식 참조를 None으로 둘 수 있습니다. 이는 모델링 관례이며, 해당 속성에서 None이 무엇을 뜻하는지는 주변 프로그램이 결정합니다.
다음 예제는 선택적 자식 참조 두 개를 가진 노드를 정의하고 왼쪽 자식이 없는지 확인합니다.
class Node:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
root = Node("root")
print(root.left is None)
True
새 노드는 각각 left와 right가 None으로 설정된 상태로 시작합니다. 이후 코드에서 두 속성 중 하나에 다른 Node를 할당할 수 있습니다. 마지막 표현식은 왼쪽 자식이 여전히 없는지 확인합니다. 이 예제는 Python의 객체 참조를 보여 주며, C처럼 역참조하거나 NULL 주소를 할당할 수 있는 포인터를 보여 주는 것이 아닙니다. Python의 None은 관례상 부재를 나타내는 일반 객체 값이며, 선택적 참조를 사용하기 전에 코드에서 이 값을 명시적으로 확인해야 합니다.