`isinstance()`를 활용한 유효성 검사

소환인·2023년 10월 11일
0

파이썬

목록 보기
7/8

파이썬의 내장 함수인 isinstance()를 사용하여 유효성 검사를 하는 방법에 대해 알아보겠습니다.

isinstance()의 구조와 작동 원리

isinstance() 함수는 다음과 같은 구조로 작동합니다.

isinstance(object, classinfo)
  • object: 타입을 확인하고자 하는 객체
  • classinfo: 객체가 속해야 하는 클래스 또는 데이터 타입, 또는 클래스/데이터 타입의 튜플

이 함수는 objectclassinfo에 지정된 클래스 또는 데이터 타입의 인스턴스, 또는 그 서브 클래스의 인스턴스인 경우 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이 정수인지를 검사하여 정수가 아닌 경우 유효하지 않은 입력임을 알려줍니다. trytype()을 이용해 처리할 수도 있겠지만 위와 같이 isinstance()를 이용해 사용자의 입력이 유효한 것인지 확인할 수 있습니다.

마무리

isinstance()는 코드의 유연성과 안정성을 높여주는 유용한 함수입니다. 특히, 다양한 데이터 타입을 처리해야 하는 경우나, 사용자로부터 입력을 받아 처리해야 하는 상황에서 유효성 검사를 효율적으로 수행할 수 있게 도와줍니다.

profile
돌고돌아

0개의 댓글