2.1 타입 정의
가끔 코드의 특정 부분에서는 변수가 어떤 데이터를 담고 있는지 모를 때가 있어. 이럴 때 Python에서는 객체의 타입을 알아내기 위해 함수 type()
를 사용할 수 있어.
이건 내장 함수로, 지정된 객체의 타입을 반환해주지. 디버깅, 데이터 유효성 검사, 또는 데이터 타입에 따라 변화하는 로직 구현 시에 유용하게 쓸 수 있어.
type()
함수의 작동 원리
type(x)
를 호출하면, Python은 변수 x의 타입을 나타내는 특별한 type
객체를 반환해. 예를 들어:
x = 1
print(type(x)) # 출력: <class 'int'>
x = "안녕"
print(type(x)) # 출력: <class 'str'>
x = [1, 2, 3]
print(type(x)) # 출력: <class 'list'>
출력에 class라는 단어가 보일 거야. 이는 int, str, list 같은 타입도 사실은 클래스라는 걸 의미해. 너가 별도로 선언할 필요 없는, Python에 기본적으로 내장된 클래스들이지.
실제 적용
type()
함수는 데이터 타입에 따라 작업을 구분해야할 때 자주 사용돼.
- 변수의 타입에 따라 다른 행동을 취할 수 있어.
- 함수나 메서드 내에서 인자의 타입의 정확성을 확신하기 위해.
만약 변수에 숫자가 들어있는지 확인하고 싶으면, 아래와 같은 코드를 작성하면 돼:
arg = 123
if type(arg) == int:
print(arg + 10) # 출력: 133
변수에 저장된 객체 타입을 확인하는 실용적인 예는 아래와 같아:
arg = "123"
if type(arg) == int:
print(arg + 10) # 이건 실행되지 않아. arg는 문자열이니까.
elif type(arg) == str:
print(arg + " world") # 출력: 123 world
else:
print("알 수 없는 타입")
2.2 명시적 타입 지정
Python에서는 int()
, float()
, str()
, tuple()
같은 타입 변환 함수를 통해 객체의 타입을 명시적으로 지정할 수 있어. 이런 함수들은 특정 타입을 지정하고 한 타입에서 다른 타입으로 데이터를 변환하는데 편리해. 특히 사용자 입력 처리, 수학적 연산 수행 또는 문자열 및 데이터 컬렉션 작업 시 유용해.
타입 변환 함수 예제
int()
: 데이터를 정수로 변환해. 이 함수는 이미 여러 번 봤겠지만, 문자열 속 숫자를 전달하면 int()
가 이를 해당 정수로 변환해.
num = int("123") # num은 정수 123이 돼
float()
: 또 하나의 익숙한 함수야. 데이터를 실수로 변환해.
num = float("123.45") # num은 123.45가 돼
str()
: 어떤 Python 객체라도 문자열로 변환해줘.
s = str(10.5) # s는 '10.5'가 돼
tuple()
: 시퀀스를 튜플로 변환해.
t = tuple([1, 2, 3]) # t는 (1, 2, 3)이 돼
list()
: 이터러블 객체(문자열이나 튜플 같은)를 리스트로 변환해. 이터러블 객체는 순차적으로 순회할 수 있는 객체들을 말해, 예를 들어 문자열, 리스트, 튜플 등이야.
l = list("abc") # l은 ['a', 'b', 'c']가 돼
dict()
: 키-값 쌍의 시퀀스로부터 사전을 생성해.
d = dict([(1, 'a'), (2, 'b')]) # d는 {1: 'a', 2: 'b'}가 돼
사전과 튜플에 대해서는 조금 있다가 더 이야기할 테니 너무 걱정하지 마. 큰 그림을 잡으면 돼: 만약 너가 명시적으로 어떤 타입을 지정해야 한다면, 위에 적힌 함수들을 사용할 수 있어.
2.3 타입 변환
Python에서는 명시적 타입 변환(또는 타입 캐스팅)을 통해 개발자가 변수의 데이터 타입을 제어하고 변경할 수 있어. 이는 다양한 작업에서 데이터의 호환성을 보장하거나, 사용자 입력이나 파일을 읽을 때 받은 데이터의 타입을 수정하는 데 유용해. 사실, 타입 변환과 타입 캐스팅은 데이터 객체의 타입을 다른 타입으로 변경하는 과정을 말하는데, 둘 다 동일한 의미를 갖고 있어.
명시적 타입 변환은 이전에 조금 다뤄봤어. Python에서는 내장 함수인 int()
, float()
, str()
, tuple()
, list()
, dict()
, set()
등을 통해 사용할 수 있어.
몇 가지 추가 예제를 통해 더 알아보자:
함수 | 설명 | 입력 예시 | 출력 예시 |
---|---|---|---|
int() |
정수로 변환 | int("10") | 10 |
float() |
실수로 변환 | float("20.5") | 20.5 |
str() |
문자열로 변환 | str(15) | "15" |
tuple() |
튜플로 변환 | tuple([1, 2, 3]) | (1, 2, 3) |
list() |
리스트로 변환 | list("abc") | ['a', 'b', 'c'] |
dict() |
키-값 쌍으로 사전 생성 | dict([(1, 'one'), (2, 'two')]) | {1: 'one', 2: 'two'} |
set() |
리스트로부터 집합 생성 | set([1, 1, 2, 2, 3, 3]) | {1, 2, 3} |
사용 예시
명시적 타입 변환은 여러 시나리오에서 사용돼, 예를 들어:
- 사용자 입력 처리: 입력된 데이터가 예상하는 데이터 타입과 일치하도록 보장해.
- 데이터 상호운용성: 서로 다른 소스나 API에서 받은 데이터를 결합하거나 비교할 때 사용해.
- 오류 처리: 연산을 수행하기 전에 데이터를 적절한 타입으로 변환함으로써 런타임 오류를 방지할 수 있어.
최고의 실천 방법과 주의사항
명시적 타입 변환은 데이터 손실(예: float
를 int
로 변환할 때)이나 타입 변환 오류(예: 숫자가 아닌 문자열을 숫자로 변환하려 할 때)를 피하기 위해 신중하게 사용해야 해.
또한 어떤 변환은 직관적이지 않을 수 있고 예상치 못한 결과를 초래할 수 있다는 점도 상기해야 해. 예를 들어 int
를 bool
로 변환한 후 다시 int
로 변환하는 과정에서는 예상치 못한 효과가 나타날 수 있어 :)
GO TO FULL VERSION