형 변환(Type Casting)
파이썬에서는 데이터 타입을 변환하는 방법으로 명시적(Explict) 형 변환과 암시적(Implict) 형 변환을 제공합니다. 명시적 형 변환은 프로그래머가 직접 특정 데이터 타입으로 변환을 명시하는 것으로, 주로 'int()', 'float()', 'str()', 'list()' 등의 함수를 사용합니다. 반면에 암시적 형 변환은 파이썬이 자동으로 수행하는 변환으로 보통 숫자형 연산에서 일어납니다. 하나씩 살펴보겠습니다.
명시적 형 변환(Explict Type Casting)
프로그래머가 직접 명령을 통해 데이터 타입을 변환하는 방법을 의미합니다. 파이썬에서 제공하는 다양한 내장 함수를 이용해 특정 데이터 타입을 다른 데이터 타입으로 변환할 수 있습니다. 주로 다음과 같은 함수들이 사용됩니다.
▪ int() : 다른 데이터 타입을 '정수형'으로 변환
▪ float() : 다른 데이터 타입을 '실수형'으로 변환
▪ str() : 다른 데이터 타입을 '문자열'로 변환
▪ list() : 이터러블(리스트, 튜플, 문자열, 딕셔너리, 세트)을 리스트로 변환
▪ tuple() : 이터러블을 튜플로 변환
▪ set() : 이터러블을 세트로 변환
명시적 형 변환의 사용 예
1. 문자열을 정수로 변환
num_str = '123'
num_int = int(num_str)
print(num_int) # 123
2. 실수를 정수로 변환
num_float = 3.14
num_int = int(num_float)
print(num_int) # 3
3. 정수를 문자열로 변환
number = 123
str_number = str(number)
print(str_number) # "123" (문자열로 변환)
주의 사항으로는 형 변환 수행시, 변환하려는 데이터가 형식에 적합하지 않을 경우 오류가 발생할 수 있습니다. 따라서 적합한 형식에 맞는 변환을 입력해야하겠습니다. 예시로 아래는 알파벳 문자를 정수형으로 변환하고자 했을 때입니다.
num_str = 'abc'
num_int = int(num_str) # ValueError 발생
암시적 형 변환(Implict Type Casting)
암시적 형 변환은 파이썬이 자동으로 형 변환을 수행하는 경우입니다. 예를 들어, [예시 1]처럼 정수와 실수를 더하면 정수는 실수로 자동 변환됩니다.
암시적 형 변환의 사용 예
1. 정수와 실수의 연산
result = 10 + 3.14
print(result) # 13.14 (정수 10이 실수 10.0으로 변환됨)
2. 불리언과 정수의 연산
result = True + 3
print(result) # 4 (True가 1로 변환됨)
result = False * 10
print(result) # 0 (False가 0으로 변환됨)
3. 정수와 복소수의 연산
result = 7 + 2j
print(result) # (7+2j) (정수 7이 복소수로 변환됨)
4. 문자열과 정수의 곱
result = "hello" * 3
print(result) # "hellohellohello"
5. 리스트와 정수의 곱
result = [1, 2, 3] * 2
print(result) # [1, 2, 3, 1, 2, 3]
주의 사항으로는 암시적 형 변환의 경우 명확하지 않은 상황에서는 파이썬이 자동으로 형 변환을 수행하지 않을 수 있습니다. 따라서 복잡한 연산에서는 명시적 형 변환을 사용하는 것이 권장됩니다.
주의 사항 및 수정된 코드 예시
1. 서로 다른 데이터 타입의 연산이 불가능한 경우
잘못된 코드 (암시적 변환이 일어나지 않음):
num = 10
text = " apples"
# 이 코드는 오류가 발생합니다.
# 파이썬은 정수와 문자열을 자동으로 변환하지 않기 때문입니다.
result = num + text
# TypeError: unsupported operand type(s) for +: 'int' and 'str'
수정된 코드 (명시적 형 변환 필요):
num = 10
text = " apples"
# 숫자를 문자열로 명시적으로 변환하여 해결
result = str(num) + text
print(result) # "10 apples"
2. 리스트와 문자열의 연산
잘못된 코드 (암시적 변환이 일어나지 않음):
my_list = [1, 2, 3]
my_string = "456"
# 리스트와 문자열을 더하는 것은 불가능합니다.
result = my_list + my_string
# TypeError: can only concatenate list (not "str") to list
수정된 코드 (명시적 형 변환 필요):
my_list = [1, 2, 3]
my_string = "456"
# 문자열을 리스트로 변환한 후 연산 가능
result = my_list + list(my_string)
print(result) # [1, 2, 3, '4', '5', '6']
3. 실수와 복소수의 덧셈에서 타입이 일치하지 않을 경우
잘못된 코드 (암시적 변환이 일어나지 않음):
real_number = 10.0
complex_number = 3 + 4j
# 실수와 복소수는 자동으로 변환되지 않음
result = real_number + complex_number
# TypeError: can't convert complex to float implicitly
수정된 코드 (명시적 형 변환 필요):
real_number = 10.0
complex_number = 3 + 4j
# 실수는 복소수로 명시적으로 변환 가능
result = complex(real_number) + complex_number
print(result) # (13+4j)
4. 논리 연산과 숫자 연산에서 발생할 수 있는 문제
잘못된 코드 (암시적 변환이 일어나지 않음):
flag = True
number = "100"
# True는 1로 변환되지만, 문자열과 숫자 간 연산이 불가능하여 오류 발생
result = flag + number
# TypeError: unsupported operand type(s) for +: 'bool' and 'str'
수정된 코드 (명시적 형 변환 필요):
flag = True
number = "100"
# 명시적으로 변환하여 계산 가능
result = str(flag) + number
print(result) # "True100"
※ 이 글이 도움이 되었다면 "👆🏻구독"과 "🤍공감" 버튼을 클릭해주세요. 클릭 한번이 글 쓰는데 큰 힘이 됩니다.