HOWTO · Python

Python에서 변수 유형 확인

Python의 `type()`과 `isinstance()`를 사용해 값의 유형을 확인하는 방법을 알아봅니다.

이 페이지의 내용

type(value)로 값의 유형을 확인하고, isinstance(value, SomeType)로 해당 값이 특정 유형(하위 클래스 포함)에 속하는지 검사할 수 있습니다. Python 변수는 객체에 연결된 이름이므로, 미리 선언된 변수 유형이 아니라 이름이 가리키는 값을 확인합니다.

Python의 변수와 유형

Python에서 이름은 객체를 가리키며, 객체에는 유형이 있습니다. 값을 할당하면 이름이 해당 객체에 연결됩니다. 이름의 유형을 미리 선언할 필요는 없습니다. 예를 들어 42, 3.5, "hello", True, [1, 2]는 각각 int, float, str, bool, list 유형의 값입니다. 같은 이름이 나중에는 다른 유형의 객체를 가리킬 수도 있습니다.

Python에서 변수의 유형 확인하기

값을 빠르게 살펴보려면 type()에 전달하고, 코드에서 참·거짓으로 유형을 검사해야 한다면 isinstance()를 사용합니다. 아래 예제에서는 정수와 문자열에 두 방법을 모두 적용합니다. 예제는 단독으로 실행할 수 있으므로 Python으로 실행하면 출력 결과를 확인할 수 있습니다.

count = 50
label = "Ada"

print(type(count))
print(type(label))
print(isinstance(count, int))
print(isinstance(label, int))
<class 'int'>
<class 'str'>
True
False

Python에서 변수 유형을 확인할 때 type() 함수 사용하기

내장 함수 type()은 전달한 값의 유형 객체를 반환합니다. 이를 출력하면 일반적인 내장 유형은 <class 'int'>, <class 'float'>, <class 'str'>와 같은 형태로 표시됩니다. 디버깅 중 값을 살펴보거나 정확한 유형에 따라 동작을 선택할 때 유용합니다.

예를 들어 type(50)은 int, type(10.5)는 float, type("Ada")는 str입니다. type()을 호출하면 객체가 어떤 유형인지 확인할 수 있지만, 객체를 다른 유형으로 변환하지는 않습니다.

Python에서 변수 유형을 확인할 때 isinstance() 함수 사용하기

isinstance(value, classinfo)를 사용하면 value가 지정된 클래스 또는 클래스들의 인스턴스인지 True 또는 False로 확인할 수 있습니다. type(value)의 결과를 클래스와 직접 비교하는 것과 달리, isinstance()는 하위 클래스도 인식합니다. 따라서 특정 클래스와 그 하위 클래스까지 허용해야 하는 검사에 적합합니다.

class Animal:
    pass

class Dog(Animal):
    pass

pet = Dog()
print(isinstance(pet, Dog))
print(isinstance(pet, Animal))
print(type(pet) is Dog)
True
True
True

이 예제에서는 Dog가 Animal을 상속하므로 두 isinstance() 검사가 모두 참입니다. pet이 Dog로 생성되었기 때문에 정확한 유형 비교도 참입니다. 정확히 일치하는 유형이 필요한 경우에만 type(value) is SomeType을 사용하세요. 유형을 살펴보거나 인스턴스인지 검사해도 값의 유형은 바뀌지 않습니다.

이 차이는 함수가 기본 클래스와 그 클래스를 바탕으로 만들어진 특수한 객체를 모두 처리하도록 설계되었을 때 중요합니다. 예를 들어 Animal을 받는 코드는 대개 같은 인터페이스를 통해 Dog도 처리할 수 있으므로, isinstance(pet, Animal)은 그런 계약을 나타냅니다. type(pet) is Animal 같은 정확한 유형 검사는 Dog가 Animal을 상속하더라도 이를 거부합니다. 하위 클래스를 다르게 처리해야 하거나 명시적으로 지원하지 않는 경우에만 정확한 유형 검사를 사용하세요. 일반적인 다형성 코드에서는 하위 클래스를 인식하는 검사가 대체로 더 유연합니다.