[ FastAPI ] 파이썬 자료형 입문
파이썬은 선택적 "자료형 힌트"를 제공합니다.
이 "자료형 힌트"는 변수의 자료형 선언을 허용하는 특별한 문법입니다.
변수에 자료형을 선언하면, 편집기와 도구가 더 나은 도움을 줄 수 있습니다.
이것은 단지 파이썬 자료형 힌트에 관한 간단한 튜토리얼 / 복습입니다. 따라서 이것을 FastAPI와 함께 사용하는 데 필요한 최소한의 지식만을 다룹니다... 실제로 내용이 매우 적습니다.
FastAPI는 이 자료형 힌트를 기반으로 작동하며, 이것들은 많은 장점과 이점을 가져다 줍니다.
그러나 만약 당신이 FastAPI를 사용하지 않더라도, 이걸 조금이라도 배운다면 분명 당신에게 도움이 될 것입니다.
참고
만약 당신이 파이썬 전문가이고, 자료형 힌트에 대한 모든 걸 알고 있다면 이 단계를 생략하고 다음 챕터로 가시기 바랍니다.
동기
간단한 예시로 시작해봅시다:
이 프로그램의 결괏값은 다음과 같습니다:
함수는 다음과 같은 작업을 수행합니다:
- first_name 과 last_name 을 인자로 받습니다.
- 각각의 첫 글자를 title() 를 사용하여 대문자로 변환합니다.
- 중간에 공백을 넣어 두 문자를 결합합니다.
수정
이건 매우 간단한 프로그램입니다.
그러나 당신이 이것을 처음 부터 작성한다고 상상해봅시다.
어떤 부분에서는 함수를 정의하는 것부터 시작하고, 매개변수를 준비하고 ...
그러나 다음에는 "첫 글자를 대문자로 변환해주는 메서드"를 실행해야만 합니다.
upper 입니까? uppercase 입니까? first_uppercase 입니까? capitalize 입니까?
그리고는, 프로그래머의 오래된 친구인, 편집기의 자동 완성을 사용할 것입니다.
함수의 첫 번째 매개변수인 first_time 을 입력하고, 그 다음 점( . )을 입력하고 Ctrl+Space 를 눌러 완성 기능을 작동합니다.
그러나, 안타깝게도, 아무 쓸모있는 걸 얻진 못했습니다:
자료형 추가
이제 이전 버전에서 한 줄을 수정해봅시다.
우리는 함수의 매개변수인 이 부분을:
다음과 같이 변경할 것입니다:
이게 끝입니다.
이것들이 바로 "자료형 힌트"입니다:
이것은 다음과 같이 기본값을 선언하는 방식과는 다릅니다:
이건 다른 방식입니다.
우리는 등호( = )가 아닌 콜론( : )을 사용했습니다.
그리고 일반적으로 자료형 힌트를 추가하더라도 자료형 인트가 없었을 때 발생하던 상황이 바뀌지는 않습니다.
그러나 이제, 자료형 힌트를 사용하여 당신이 함수를 만드는 중간 단계에 있다고 상상해봅시다.
같은 부분에서, Ctrl+Space 를 눌러 자동 완성을 시도하면 다음과 같은 상황을 볼 수 있습니다:
이것을 통해, 당신은 "원하던 것"을 찾을 때까지 스크롤하거나, 옵션을 볼 수 있습니다:
더 많은 동기부여
아래 함수를 확인해봅시다, 여기엔 벌써 자료형 힌트가 주어져 있습니다:
왜냐하면 편집기가 변수의 자료형을 알기 때문에, 완성 기능을 제공하는 것 뿐만 아니라, 오류도 확인할 수 있습니다:
이제 당신은 age 를 str(age) 를 사용하여 문자열로 바꿔 수정해줘야 한다는 걸 알 수 있습니다.
자료형 선언
당신은 자료형 힌트 선언이 함수의 매개변수로 유용하게 쓰인다는 걸 확인했습니다.
이것은 또한 FastAPI와 함께 유용하게 쓰입니다.
간단한 자료형
당신은 str 뿐만 아니라 모든 표준 파이썬 자료형을 선언할 수 있습니다.
예를 들어 다음과 같은 것들을 사용할 수 있습니다:
- int
- float
- bool
- bytes
자료형 매개변수로 사용되는 제네릭 자료형
dict , list , set 그리고 tuple 과 같이 다른 값을 포함할 수 있는 자료 구조가 있습니다. 그리고 내부의 값으로 그 자료형 자체를 가질 수도 있습니다.
이러한 자료형과 내부 자료형을 선언하려면 표준 파이썬 모듈인 typing 을 사용하면 됩니다.
특히 아래와 같은 자료형 힌트를 지원해주기 위해 존재합니다.
List
예를 들어, str 로 이루어진 list 변수를 정의해봅시다.
typing 모듈로부터, (대문자 L 로 시작하는) List 를 임포트 합니다.
동일한 콜론( : ) 문법을 사용해, 변수를 선언합니다.
자료형으로, List 을 입력합니다.
리스트는 내부 자료형을 포함하기 때문에, 그것을 대괄호 안에 입력할 수 있습니다.
팁
이렇게 대괄호 안에 입력된 내부 자료형을 "자료형 매개변수"이라 부릅니다.
이 경우, str 은 List 에 전달된 자료형 매개변수입니다.
이것은 "변수 items 는 list 고, 각각의 리스트 속 아이템들은 str "인 것을 의미합니다.
이를 통해, 편집기는 리스트의 항목들을 처리하는 동안에도 당신을 도와줄 수 있습니다:
자료형 없이, 그것은 거의 달성하기 불가능합니다.
변수 item 은 리스트 items 의 한 요소인 것을 잊지마시기 바랍니다.
그리고 여전히, 편집기는 이것이 str 인 것을 알고, 이와 관련한 도움을 줄 수 있습니다.
Tuple and Set
tuple 과 set 을 선언할 때도 동일합니다.
이것은 다음을 의미합니다:
- 변수 items_t 는 3개의 항목인 int , 또 다른 int , 그리고 str 을 갖는 tuple 입니다.
- 변수 items_s 는 모든 아이템의 자료형이 bytes 인 set 입니다.
Dict
dict 을 정의하기 위해서는, 쉼표로 구분 된, 2개의 자료형 매개변수을 전달해야 합니다.
첫 번째 자료형 매개변수은 dict 의 키가 됩니다.
두 번째 자료형 매개변수은 dict 의 값이 됩니다:
이것은 다음을 의미합니다:
- 변수 prices 는 dict 입니다.
- dict 의 (각 항목의 이름이라 할 수 있는) 키는 str 자료형입니다.
- dict 의 (각 항목의 가격이라 할 수 있는) 값은 float 자료형입니다.
Optional
Optional 을 사용하여 str 같은, 자료형을 갖지만 None 이 되도 괜찮은, "선택적"인 변수를 선언할 수 있습니다:
str 을 대신 Optional[str] 을 사용하면 당신이 실제로 None 일 수 있는 값을 항상 str 이라고 추정할 수 있는 오류를 편집기를 통해 찾아내는 데 도움이 됩니다.
제네릭 자료형
대괄호 내에 다음과 같은 자료형 매개변수를 갖는 자료형입니다:
- List
- Tuple
- Set
- Dict
- Optional
- ... 기타 등등.
이것들을 제네릭 자료형 또는 제네릭스라 부릅니다.
자료형으로 사용되는 클래스
당신은 또한 변수의 자료형으로 클래스를 선언할 수 있습니다.
Person 이라는 이름의 클래스가 정의되어 있다고 해봅시다:
그렇다면 당신은 Person 자료형이 되는 변수를 선언할 수 있습니다:
이를 통해, 다시 한 번, 당신은 편집기의 모든 도움을 받을 수 있습니다.
Pydantic 모델
Pydantic은 데이터의 유효성 검사를 수행하는 파이썬 라이브러리입니다.
우선 데이터의 "형태"를 어트리뷰트를 가진 클래스로 선언합니다.
그리고 각각의 어트리뷰트는 자료형을 갖습니다.
어떤 값을 가진 클래스의 인스턴스를 생성하고 그 값에 대한 유효성 검사를 진행한 뒤, 그것들을 알맞은 자료형으로 변환하고 (만약 그것이 통과 된다면) 모든 데이터가 포함된 객체를 반환합니다.
그리고 결과로 반환된 객체를 통해 모든 편집기의 도움을 받을 수 있습니다.
아래는 공식 Pydantic 문서의 예시입니다:
정보
Pydantic을 더 배우기 위해서는, 이 문서를 확인하시기 바랍니다.
FastAPI는 전부 Pydantic을 기반으로 합니다.
튜토리얼 - 사용자 지침서의 예제들 속에서 관련된 것들을 더 많이 확인할 수 있습니다.
FastAPI에서의 자료형 힌트
FastAPI는 이러한 자료형 힌트의 이점을 활용해 여러 작업을 수행합니다.
FastAPI를 사용하여 자료형 힌트를 가진 매개변수를 선언하고 다음과 같은 이점을 취할 수 있습니다:
- 편집기의 도움.
- 자료형 검사.
...그리고 FastAPI는 똑같은 선언 방식을 사용합니다:
- 요구사항 정의: 요청 경로 매개변수, 쿼리 매개변수, 헤더, 바디, 의존성 기타 등등으로 부터의 요구사항을 정의합니다.
- 데이터 변환: 요청으로 부터 요구되는 자료형으로 데이터를 변환합니다.
- 데이터 유효성 검사: 각각의 요청을 전달 받은 뒤:
- 데이터가 유효하지 않다면 자동으로 에러를 생성해 클라이언트에게 반환합니다.
- OpenAPI를 사용한 API 문서:
- 자동 대화형 문서 사용자 인터페이스에 의해 사용됩니다.
이것들이 전부 추상적으로 들릴 수도 있습니다. 걱정하지 마시기 바랍니다. 당신은 이것과 관련된 모든 작동을 튜토리얼 - 사용자 지침서에서 확인할 수 있습니다.
중요한 점은 표준 파이썬 자료형을 (더 많은 클래스, 데코레이터, 기타 등등을 추가하는 대신) 한 곳에 사용하여, FastAPI가 많은 작업을 대신 수행한다는 것입니다.
정보
만약 당신이 모든 튜토리얼을 완료하고 더 많은 자료형을 확인하러 이곳에 왔다면, mypy 에서 제공하는 "치트시트"가 좋은 참고자료가 될 것입니다.