Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬의 널(Null) 객체 완벽 이해하기: None의 모든 것

다른 프로그래밍 언어에서 흔히 볼 수 있는 null 객체는 파이썬에 존재하지 않습니다. 대신 파이썬에서는 그와 가장 유사한 개념으로 None을 사용합니다. 이 글에서는 파이썬에서 None이 어떻게 동작하는지, 그리고 사용할 때 주의해야 할 점들을 예제와 함께 살펴보겠습니다.

None의 타입 확인하기

Null과 None의 타입을 각각 확인해 보면, 'Null'이라는 타입은 존재하지 않으며 None 객체는 NoneType 타입이라는 사실을 알 수 있습니다.

예제

print(type(None))
print(type(Null))

출력 결과

위 코드를 실행하면 다음과 같은 결과가 나옵니다 −

Traceback (most recent call last):
    File "C:\Users\xxx\scratch.py", line 4, in
        print(type(Null))
NameError: name 'Null' is not defined

type(None)은 정상적으로 <class 'NoneType'>을 반환하지만, 정의된 적 없는 Null을 참조하려 하면 위와 같이 NameError가 발생합니다.

None에 대한 핵심 사실

  • None은 False와 같지 않습니다.

  • None은 빈 문자열('')과도 다릅니다.

  • None은 숫자 0과도 다릅니다.

  • None을 자기 자신 외의 어떤 값과 비교하면 항상 False가 반환됩니다.

즉, None은 거짓(False), 빈 문자열, 0처럼 보일 수 있지만 실제로는 전혀 다른 고유한 객체입니다. 다만 불리언 문맥에서는 None이 거짓으로 평가된다는 점은 기억해 두면 좋습니다.

파이썬에서의 Null 변수

정의되지 않은(undefined) 변수와 Null 변수는 서로 다른 개념입니다. 파이썬에서 변수에 None을 할당하면 그 변수가 비로소 Null 상태가 됩니다.

예제

var_a = None
print('var_a is: ', var_a)
print(var_b)

출력 결과

위 코드를 실행하면 다음과 같은 결과가 나옵니다 −

Traceback (most recent call last):
    File "C:\Users\Pradeep\AppData\Roaming\JetBrains\PyCharmCE2020.3\scratches\scratch.py", line 5, in <module>
        print(var_b)
NameError: name 'var_b' is not defined
var_a is: None

None을 할당받은 var_a는 정상적으로 출력되지만, 아무것도 할당되지 않은 var_b를 출력하려 하면 NameError가 발생합니다. 이는 '값이 없음(None)'과 '변수 자체가 존재하지 않음'의 차이를 잘 보여줍니다.

None 여부를 확인하는 올바른 방법

변수가 None인지 검사할 때는 등호(==) 대신 is 연산자를 사용하는 것이 파이썬 공식 스타일 가이드(PEP 8)에서 권장됩니다.

var_a = None
if var_a is None:
    print("var_a는 None입니다")

None에는 메서드를 사용할 수 없음

어떤 객체가 None으로 선언되면, 요소를 추가하거나 제거하는 등의 메서드를 호출할 수 없습니다. None에는 리스트나 문자열 같은 객체의 메서드가 존재하지 않기 때문입니다.

예제

listA = [5,9,3,7]
listA.append(18)
print(listA)
listA = None
listA.append(34)
print(listA)

출력 결과

위 코드를 실행하면 다음과 같은 결과가 나옵니다 −

[5, 9, 3, 7, 18]
Traceback (most recent call last):
    File "C:\Users\Pradeep\AppData\Roaming\JetBrains\PyCharmCE2020.3\scratches\scratch.py", line 7, in
        listA.append(34)
AttributeError: 'NoneType' object has no attribute 'append'

리스트였던 listA에 None을 할당하는 순간 더 이상 append 메서드를 사용할 수 없게 되며, AttributeError가 발생합니다. 이러한 오류는 함수가 명시적인 값을 반환하지 않아 None을 돌려주는 경우에도 자주 나타나므로, 메서드를 호출하기 전에 해당 객체가 None이 아닌지 확인하는 습관을 들이는 것이 좋습니다.