파이썬의 내장 함수인 isinstance()
를 사용하여 유효성 검사를 하는 방법에 대해 알아보겠습니다.
isinstance()
의 구조와 작동 원리isinstance()
함수는 다음과 같은 구조로 작동합니다.
isinstance(object, classinfo)
object
: 타입을 확인하고자 하는 객체classinfo
: 객체가 속해야 하는 클래스 또는 데이터 타입, 또는 클래스/데이터 타입의 튜플이 함수는 object
가 classinfo
에 지정된 클래스 또는 데이터 타입의 인스턴스, 또는 그 서브 클래스의 인스턴스인 경우 True
를 반환합니다. 그렇지 않은 경우 False
를 반환합니다.
isinstance()
의 활용법isinstance()
는 다양한 상황에서 활용될 수 있습니다. 예를 들어, 함수의 인자로 받은 객체가 예상한 타입인지 확인하거나, 여러 타입 중 하나에 해당하는지 검사할 때 유용합니다.
# 예제 1: 단일 타입 검사
value = 10
if isinstance(value, int):
print("정수 타입입니다.")
# 예제 2: 여러 타입 검사
value = "Hello"
if isinstance(value, (int, str, list)):
print("정수, 문자열, 리스트 중 하나의 타입입니다.")
isinstance()
함수는 객체의 타입을 안정적으로 확인하고, 특정 조건에 따라 코드의 실행 흐름을 제어하는 데 도움을 줍니다.
isinstance()
를 활용한 예제아래와 같은 주사위 게임 클래스가 있다고 가정하겠습니다. 사용한 예제는 '제로베이스 데이터스쿨' 수업을 참고했습니다.
class Dice:
def __init__(self):
self._com = 0
self._user = 0
self._state = '승부'
def set_com_number(self):
com = random.randint(1, 6)
self._com = com
print('컴퓨터의 주사위가 준비되었습니다.')
def set_user_number(self):
user = random.randint(1, 6)
self._user = user
print('유저의 주사위가 준비되었습니다.')
def determine_winner(self):
if self._com > self._user:
self._state = '컴퓨터 승!'
elif self._com < self._user:
self._state = '유저 승!'
else:
self._state = '무승부'
def start_game(self):
self.set_com_number()
self.set_user_number()
self.determine_winner()
print('게임 결과가 나왔습니다.')
return self._state
def print_result(self):
print(f'컴퓨터 vs 유저 : {self._com} vs {self._user} >> {self._state}')
print('='*30)
random
모듈을 이용해서 컴퓨터와 유저의 주사위를 설정하고 주사위 숫자의 크기로 승부를 가리는 게임입니다. 주사위 종류를 변경해서 더 다양한 게임을 하기 원해서 주사위 종류를 변경하는 메소드를 추가하겠습니다.
def set_dice(self, num):
if num > 0 and isinstance(num, int):
self._dice = num
print(f'주사위 면 수가 {num}으로 설정되었습니다.')
else:
print('유효한 주사위 면수를 입력해주세요')
set_dice
메서드는 주사위의 면 수를 설정하는 역할을 합니다. 여기서 isinstance()
함수가 유효성 검사에 활용되고 있는데, 입력받은 num
이 정수인지를 검사하여 정수가 아닌 경우 유효하지 않은 입력임을 알려줍니다. try
와 type()
을 이용해 처리할 수도 있겠지만 위와 같이 isinstance()
를 이용해 사용자의 입력이 유효한 것인지 확인할 수 있습니다.
isinstance()
는 코드의 유연성과 안정성을 높여주는 유용한 함수입니다. 특히, 다양한 데이터 타입을 처리해야 하는 경우나, 사용자로부터 입력을 받아 처리해야 하는 상황에서 유효성 검사를 효율적으로 수행할 수 있게 도와줍니다.