본문 바로가기

형변환

1. Python에서의 형변환

형변환은 데이터의 타입을 다른 타입으로 바꾸는 과정을 의미합니다.

input() 함수로 받은 값은 항상 문자열입니다. 숫자 연산을 하려면 int() 또는 float()로 형변환해야 합니다.

예를 들어보도록 하겠습니다.

월급 = input("월급을 입력하세요:")
연봉 = 월급 * 12
print(f'당신의 연봉은 {연봉}입니다.')

만약 입력을 100을 했다면 아래 연봉 값은 1200이 아니라 100100100...이 출력되게 됩니다. 해당 코드는 월급으로 연봉을 계산하려는 의도였기 때문에 제대로 연산이 된 것이라 볼 수 없습니다. 이것을 제대로 연산하게 하려면 곱셈을 할 때 월급은 정수형이나 실수형이었어야 합니다. input 함수는 사용자에게 입력 받은 값을 문자열로 처리하기 때문에 형태를 변경시켜 아래와 같이 실행되게 해야 합니다.

월급 = input("월급을 입력하세요:")
연봉 = int(월급) * 12
print(f'당신의 연봉은 {연봉}입니다.')

2. 형변환 정리

주요한 형변환 메서드는 아래와 같습니다. 아직 배우지 않은 list, tuple, dict, set은 개별 챕터에서 다루도록 하겠습니다.

Built-in Function기능
int()정수로 변환
str()문자열로 변환
float()실수로 변환
list()리스트로 변환
tuple()튜플로 변환
dict()딕셔너리로 변환
set()셋으로 변환

2.1 int로 형변환

2.1.1 str에서 int로 변환

num = '123'
print(type(num))

num = int(num)
print(type(num))

위 예제는 문자열을 정수형으로 바꾸고 있습니다. 다만 아래와 같은 코드는 가능하지 않습니다.

s = '10hello'
s = int(s) # Error

2.1.2 float에서 int로 변환

f = 3.14159
number = int(f)
print(number)  # 출력: 3

float형을 정수로 변환하면 소수점 아래의 값이 버려집니다.

2.1.3 bool에서 int로 형변환

true_int = int(True)
false_int = int(False)

print(true_int)  # 출력: 1
print(false_int)  # 출력: 0

bool 값을 int로 변환했을 때에는 True는 1, False는 0으로 출력됩니다.

None은 int형으로 변환이 가능하지 않습니다.

2.2 string으로 형변환

2.2.1 int와 float에서 str으로 변환

n = str(123)
print(123, n)
print(type(n))

m = str(123.4)
print(123.4, m)
print(type(m))

여기서 주의해야 할 것은 int형은 str으로 변환했다가 다시 int형으로 변경하는 것이 문제가 되지 않지만 float형은 str으로 변환했다가 int형으로 변환했을 경우 error가 발생되게 됩니다. 닷(.)을 자동으로 인식해주지 않습니다.

2.3 bool형으로 형변환

bool() 함수는 다양한 파이썬 데이터 타입을 True 또는 False 값으로 변환합니다. 특히 조건문, 반복문에서 다양한 자료형을 True 또는 False로 판단하는지 아는 것은 매우 중요합니다.

값bool() 결과이유
'test'True내용이 있는 문자열
''False빈 문자열
100, -1True0이 아닌 숫자
0False0은 거짓
NoneFalse값 없음
[], {}, set()False빈 컨테이너
print("bool('test'):", bool('test'))
print("bool(' '):", bool(' '))
print("bool(''):", bool('')) # False
print("bool(100):", bool(100))
print("bool(1):", bool(1))
print("bool(0):", bool(0)) # False
print("bool(-1):", bool(-1))
print("bool(None):", bool(None)) # False
print("bool([]):", bool([])) # False
print("bool(tuple()):", bool(tuple())) # False
print("bool({}):", bool({})) # False
print("bool(set()):", bool(set())) # False

False인 것만 주석을 달아두었습니다. 빈 자료형의 경우에는 False로 평가된다는 점을 기억해주세요. 2번째 예시인 ' '는 안에 공백 한 칸이 들어있기 때문에 빈 문자열이 아니며, 따라서 True입니다.

2.4 float형으로 형변환

2.4.1 일반 float 형변환

이번에는 float로 형변환 하는 것을 알아보도록 하겠습니다.

s = 10
print(float(s))

s = '10'
print(float(s))

s = '3.14'
print(float(s))

정수의 값, 문자열 안에 정수로 입력된 값, 문자열 안에 실수로 입력된 값은 모두 실수로 변환이 가능합니다.

2.4.2 특수 float 형변환

'inf', '-inf', 'nan' 같은 특별한 문자열은 float()를 사용해 변환할 수 있습니다. 이들은 각각 무한대(infinity), 음의 무한대 및 숫자가 아닌 것(Not a Number)을 나타냅니다. 이러한 특별한 문자 형변환은 대소문자를 가리지는 않습니다.

infinity = float('inf')
neg_infinity = float('-inf')
not_a_number = float('nan')

2.4.3 묵시적 형변환

지금까지는 int(), float()처럼 우리가 직접 형을 바꾸는 명시적 형변환을 살펴봤습니다. 반대로 파이썬이 알아서 형을 맞춰주는 경우도 있습니다. 이를 묵시적 형변환이라고 합니다.

서로 다른 숫자 타입을 연산하면 표현 범위가 더 넓은 쪽으로 자동으로 맞춰집니다. bool은 int의 하위 타입이므로 int로, int는 필요하면 float로 올라갑니다.

print(True + 1, type(True + 1))    # 2, int
print(1 + 2.0, type(1 + 2.0))      # 3.0, float
print(2.0 + 3j, type(2.0 + 3j))    # (2+3j), complex

나눗셈 연산자 /는 조금 특별합니다. 나누어떨어지더라도 항상 float를 반환합니다.

print(10 / 1, type(10 / 1))   # 10.0, float
print(10 // 1, type(10 // 1)) # 10, int

다만 숫자와 문자열처럼 성격이 다른 타입은 자동으로 맞춰주지 않습니다. 이런 경우에는 반드시 직접 형변환을 해주어야 합니다.

print(1 + '2')  # TypeError
형변환 - 견고한 파이썬 | 위니버시티