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

파이썬 isinstance() 함수 완벽 가이드: 데이터 타입 검사 방법

파이썬의 isinstance() 함수는 변수가 지정된 데이터 타입과 일치하는지 여부에 따라 True 또는 False를 반환합니다. 파이썬에서 isinstance()의 기본 문법은 isinstance(검사할_변수, 데이터_타입) 형태입니다.

프로그래밍에서 특정 값의 데이터 타입을 확인하는 것은 매우 흔한 작업입니다. 예를 들어, 변수에 저장된 값이 문자열인지 숫자인지 확인해야 할 수 있습니다. 각 데이터 타입은 코드에서 서로 다르게 동작하기 때문입니다.

바로 이럴 때 isinstance() 함수가 유용하게 사용됩니다. isinstance()는 특정 값의 데이터 타입을 검증할 수 있는 파이썬 내장 메서드입니다. 예를 들어, isinstance()를 사용해 어떤 값이 문자열인지 리스트인지 확인할 수 있습니다.

이 튜토리얼에서는 파이썬에서 isinstance() 메서드를 사용하는 방법을 단계별로 살펴보고, 이해를 돕기 위한 몇 가지 예제도 함께 소개합니다.

파이썬 isinstance 개요

파이썬으로 코딩할 때는 다양한 종류의 데이터를 사용합니다. 대표적인 데이터 타입으로는 문자열(string), 숫자(number), 리스트(list), 튜플(tuple), 딕셔너리(dictionary) 등이 있습니다. 각 데이터 타입마다 데이터가 저장되고 조작되는 방식을 규정하는 고유한 규칙이 있습니다. 예를 들어, 숫자에는 수학적 연산을 수행할 수 있지만 문자열에는 그렇게 할 수 없습니다.

따라서 프로그램에서 올바른 데이터 타입을 사용하고 있는지 확인하는 것이 중요합니다. 파이썬의 isinstance()를 활용하면 다루고 있는 데이터가 적절한 데이터 타입으로 저장되어 있는지 검증할 수 있습니다.

isinstance()는 특정 값이 특정 데이터 타입으로 저장되어 있는지 확인하는 파이썬 내장 함수입니다. 이 글 뒤에서 다룰 type() 메서드와 달리, isinstance()는 검사 중인 값이 지정한 데이터 타입에 해당하는지 여부에 따라 True 또는 False만 반환합니다.

isinstance()의 문법은 다음과 같습니다:

isinstance(object, data_types)

isinstance() 메서드는 두 개의 필수 매개변수를 받습니다:

  • object: 데이터 타입을 확인하고자 하는 객체입니다.
  • data_types: 객체가 가질 수 있는 하나 이상의 데이터 타입입니다.

isinstance() 메서드는 객체를 지정된 데이터 타입과 비교합니다. 두 개 이상의 데이터 타입과 비교하려면 data_types 매개변수에 튜플(tuple) 형태로 지정해야 합니다.

그 결과 코드는 True 또는 False를 반환합니다. 객체가 지정한 데이터 타입(또는 그중 하나)에 속하면 True, 그렇지 않으면 False를 반환합니다.

본질적으로 파이썬에서 isinstance를 사용한다는 것은 코드에 빈칸 채우기 문장과 답 선택지를 제시하는 것과 같습니다. 문장은 "이 객체는 (데이터 타입)이다"이며, 데이터 타입 매개변수를 지정하면 이 문장이 완성됩니다. 예를 들면 다음과 같습니다:

  • 12는 숫자이다.
  • books는 숫자이다.

이에 대한 응답으로 코드는 True 또는 False를 반환합니다.

파이썬 isinstance 예제

이제 두 가지 예제를 통해 코드에서 isinstance() 메서드를 어떻게 활용할 수 있는지 살펴보겠습니다. 어떤 값이 문자열인지 확인하고 싶다고 가정해 보겠습니다. 이때 isinstance()를 사용할 수 있습니다. 다음은 해당 코드입니다:

print(isinstance("String", str))

이 코드는 타입 검사를 수행하고 함수는 True를 반환합니다.

"String"이 실제로 문자열이기 때문입니다(파이썬에서 string 데이터 타입은 str로 표기합니다). 따라서 프로그램은 True를 반환합니다.

이제 좀 더 자세한 예제를 살펴보겠습니다.

2학년 학생들을 위한 곱셈 게임을 만든다고 가정해 봅시다. 이 게임은 사용자에게 수학 문제를 제시한 후, 사용자의 답이 맞는지 확인합니다. 프로그램이 제대로 작동하려면 사용자가 숫자를 입력했는지 먼저 확인해야 합니다.

플레이어에게 받은 답이 숫자인지 확인하려면 다음 코드를 사용할 수 있습니다:

answer = 5 * 8
user_answer = input("What is 5 x 8?")

print(isinstance(user_answer, (int, float)))

이 코드는 False를 반환합니다.

프로그램을 하나씩 분석해 보겠습니다. 첫 번째 줄에서는 플레이어에게 제시한 수학 문제의 정답을 계산합니다. 여기서 문제는 "5 x 8은 얼마인가요?"이므로 첫 줄에 answer = 5 * 8을 입력했습니다.

그다음 input() 메서드를 사용해 사용자로부터 답을 입력받습니다.

코드의 마지막 줄에서는 isinstance()를 사용해 사용자의 답(user_answer에 저장됨)이 정수(int) 또는 실수(float)인지 확인합니다. int와 float는 파이썬에서 숫자를 표현하는 두 가지 데이터 타입입니다. 이를 위해 검사하려는 데이터 타입들을 저장하는 튜플을 생성하는데, 이 코드에서는 (int, float)입니다.

코드가 False를 반환했다는 것은 사용자의 답이 정수도 실수도 아니라는 의미입니다.

객체가 int나 float의 인스턴스가 아님을 알았으니 이제 문제를 진단할 수 있습니다. 코드가 False를 반환한 이유는 input()이 사용자가 숫자를 입력하더라도 기본적으로 문자열을 반환하기 때문입니다. 따라서 코드가 제대로 작동하려면 input() 메서드의 결과를 정수로 변환해야 합니다. 다음 코드처럼 말입니다:

answer = 5 * 8
user_answer = int(input("What is 5 x 8?"))

print(isinstance(user_answer, (int, float)))

이제 코드를 실행하면 True가 출력됩니다.

이 예제와 앞선 예제의 유일한 차이점은 user_answer 줄에서 int()를 사용해 input() 메서드의 결과를 정수로 변환했다는 점입니다. 따라서 프로그램은 입력값을 문자열이 아닌 정수로 인식합니다. 그래서 isinstance() 메서드로 이 값의 데이터 타입을 검사하면, 프로그램은 해당 값이 정수 또는 실수임을 확인합니다.

위 예제에서는 객체가 특정 내장 데이터 타입을 가지고 있는지 확인했습니다. isinstance() 메서드는 객체를 특정 클래스와 비교하는 데에도 사용할 수 있습니다.

type() vs isinstance(): 무엇을 사용해야 할까?

파이썬에서 값의 타입을 확인해야 했다면 type() 메서드를 접해봤을 것입니다. type()은 변수나 값의 타입을 알아낼 수 있는 파이썬 내장 함수입니다. 파이썬 type 메서드의 문법은 다음과 같습니다:

type(data)

예를 들어, 숫자가 있고 이것이 어떤 데이터 타입으로 저장되어 있는지 확인하고 싶다고 가정해 봅시다. 다음 코드를 사용할 수 있습니다:

number = 8
print(type(number))

이 코드는 다음을 반환합니다:

<class 'int'>

보시다시피 프로그램은 데이터의 타입을 반환하며, 이 데이터가 정수로 저장되어 있다고 알려줍니다.

type()isinstance() 함수 사이에는 상황에 따라 어느 쪽이 더 적합한지를 결정짓는 큰 차이점이 하나 있습니다. 단순히 값의 데이터 타입을 알고 싶다면 type()이 더 적절합니다. 하지만 값이 특정 데이터 타입(예: 문자열이나 실수)으로 저장되어 있는지 검증하고 싶다면 isinstance()를 사용해야 합니다.

결론

파이썬에서는 isinstance() 함수를 사용해 값이 특정 데이터 타입을 가지고 있는지 검증할 수 있습니다. 예를 들어, 값들의 목록이 리스트로 저장되어 있는지, 숫자가 실수로 저장되어 있는지 확인할 때 isinstance()를 활용할 수 있습니다.

이 파이썬 튜토리얼에서는 isinstance()를 사용해 값이 특정 데이터 타입을 가지고 있는지 확인하는 방법을 알아보았습니다. 이제 여러분은 파이썬 전문가처럼 isinstance()를 활용할 수 있게 되었습니다.