1. 서론: 데이터, 때로는 다른 옷이 필요하다
프로그래밍에서 우리는 다양한 형태의 데이터를 다룹니다. 숫자는 숫자대로, 텍스트는 텍스트대로 고유한 자료형(Data Type)을 가지고 있습니다. 예를 들어, 10은 정수형이고, "Hello"는 문자열형입니다. 하지만 때로는 이러한 데이터의 형태를 바꿔야 할 필요가 있습니다. 사용자로부터 입력받은 숫자가 문자열 형태로 들어왔을 때 이를 실제 숫자로 변환해야 계산을 할 수 있고, 숫자를 문자열과 합쳐서 출력해야 할 때도 있습니다. 이처럼 한 자료형의 데이터를 다른 자료형으로 바꾸는 과정을 ‘자료형 변환(Type Conversion)’ 또는 ‘형 변환’이라고 합니다. 파이썬은 이러한 자료형 변환을 위한 다양한 내장 함수를 제공하여 데이터를 유연하게 처리할 수 있도록 돕습니다. 이 챕터에서는 파이썬에서 가장 자주 사용되는 int(), float(), str() 함수를 중심으로 다양한 자료형 변환 기법과 그 과정에서 발생할 수 있는 주의사항에 대해 깊이 있게 알아보겠습니다. 자료형 변환을 자유자재로 다루는 능력은 여러분의 파이썬 프로그래밍을 더욱 유연하고 강력하게 만들 것입니다.
2. 자료형 변환의 필요성
왜 자료형 변환이 필요할까요? 파이썬은 동적 타이핑을 지원하여 변수에 어떤 자료형의 값이든 할당할 수 있지만, 특정 연산이나 함수는 특정 자료형의 데이터만을 요구하기 때문입니다. 예를 들어:
- 숫자 연산:
"10" + "5"는 문자열 연결("105")이 되지만,10 + 5는 숫자 덧셈(15)이 됩니다. 문자열 형태의 숫자를 계산하려면 숫자로 변환해야 합니다. - 사용자 입력:
input()함수로 사용자로부터 입력받는 모든 값은 기본적으로 문자열입니다. 이를 숫자로 사용하려면 변환이 필수적입니다. - 문자열 포매팅: 숫자를 문자열과 함께 출력할 때, 숫자를 문자열로 변환해야 할 때가 있습니다.
- 데이터베이스/파일 처리: 데이터베이스나 파일에서 읽어온 데이터는 특정 자료형으로 변환해야 프로그램에서 올바르게 처리할 수 있습니다.
3. 주요 자료형 변환 함수
파이썬은 다양한 자료형 변환을 위한 내장 함수를 제공합니다.
3.1. int(): 정수형으로 변환
int() 함수는 숫자나 숫자로 구성된 문자열을 정수형(int)으로 변환합니다.
# 실수 -> 정수 (소수점 이하 버림)
float_num = 3.14
int_from_float = int(float_num)
print(f"실수 {float_num}을 정수로: {int_from_float}, 타입: {type(int_from_float)}")
# 출력: 실수 3.14을 정수로: 3, 타입: <class 'int'>
negative_float = -2.9
int_from_negative_float = int(negative_float)
print(f"실수 {negative_float}을 정수로: {int_from_negative_float}, 타입: {type(int_from_negative_float)}")
# 출력: 실수 -2.9을 정수로: -2, 타입: <class 'int'>
# 문자열 -> 정수 (문자열이 정수 형태여야 함)
str_num = "123"
int_from_str = int(str_num)
print(f"문자열 \"{str_num}\"을 정수로: {int_from_str}, 타입: {type(int_from_str)}")
# 출력: 문자열 "123"을 정수로: 123, 타입: <class 'int'>
# 불리언 -> 정수 (True는 1, False는 0)
print(f"True를 정수로: {int(True)}") # 출력: True를 정수로: 1
print(f"False를 정수로: {int(False)}") # 출력: False를 정수로: 0
# 주의: 숫자로 변환할 수 없는 문자열은 ValueError 발생
# int("hello") # ValueError: invalid literal for int() with base 10: 'hello'
# int("3.14") # ValueError: invalid literal for int() with base 10: '3.14' (실수 형태의 문자열은 int()로 직접 변환 불가)
3.2. float(): 실수형으로 변환
float() 함수는 숫자나 숫자로 구성된 문자열을 실수형(float)으로 변환합니다.
# 정수 -> 실수
int_num = 10
float_from_int = float(int_num)
print(f"정수 {int_num}을 실수로: {float_from_int}, 타입: {type(float_from_int)}")
# 출력: 정수 10을 실수로: 10.0, 타입: <class 'float'>
# 문자열 -> 실수 (문자열이 숫자 형태여야 함)
str_float = "45.67"
float_from_str = float(str_float)
print(f"문자열 \"{str_float}\"을 실수로: {float_from_str}, 타입: {type(float_from_str)}")
# 출력: 문자열 "45.67"을 실수로: 45.67, 타입: <class 'float'>
str_int_as_float = "100"
float_from_str_int = float(str_int_as_float)
print(f"문자열 \"{str_int_as_float}\"을 실수로: {float_from_str_int}, 타입: {type(float_from_str_int)}")
# 출력: 문자열 "100"을 실수로: 100.0, 타입: <class 'float'>
# 불리언 -> 실수 (True는 1.0, False는 0.0)
print(f"True를 실수로: {float(True)}") # 출력: True를 실수로: 1.0
print(f"False를 실수로: {float(False)}") # 출력: False를 실수로: 0.0
# 주의: 숫자로 변환할 수 없는 문자열은 ValueError 발생
# float("abc") # ValueError: could not convert string to float: 'abc'
3.3. str(): 문자열로 변환
str() 함수는 숫자, 불리언, 리스트, 딕셔너리 등 거의 모든 자료형의 값을 문자열(str)로 변환합니다.
# 숫자 -> 문자열
num = 123
str_from_num = str(num)
print(f"숫자 {num}을 문자열로: \"{str_from_num}\", 타입: {type(str_from_num)}")
# 출력: 숫자 123을 문자열로: "123", 타입: <class 'str'>
pi = 3.14159
str_from_pi = str(pi)
print(f"실수 {pi}을 문자열로: \"{str_from_pi}\", 타입: {type(str_from_pi)}")
# 출력: 실수 3.14159을 문자열로: "3.14159", 타입: <class 'str'>
# 불리언 -> 문자열
is_valid = True
str_from_bool = str(is_valid)
print(f"불리언 {is_valid}을 문자열로: \"{str_from_bool}\", 타입: {type(str_from_bool)}")
# 출력: 불리언 True을 문자열로: "True", 타입: <class 'str'>
# 리스트 -> 문자열
my_list = [1, 2, 3]
str_from_list = str(my_list)
print(f"리스트 {my_list}을 문자열로: \"{str_from_list}\", 타입: {type(str_from_list)}")
# 출력: 리스트 [1, 2, 3]을 문자열로: "[1, 2, 3]", 타입: <class 'str'>
4. 다른 자료형으로의 변환 (고급)
파이썬은 숫자, 문자열 외에도 다양한 자료형을 제공하며, 이들 간의 변환도 가능합니다.
4.1. list(): 리스트로 변환
list() 함수는 반복 가능한(iterable) 객체(문자열, 튜플, 셋 등)를 리스트로 변환합니다.
# 문자열 -> 리스트 (각 문자가 요소가 됨)
text = "Python"
list_from_str = list(text)
print(f"문자열 \"{text}\"을 리스트로: {list_from_str}")
# 출력: 문자열 "Python"을 리스트로: ['P', 'y', 't', 'h', 'o', 'n']
# 튜플 -> 리스트
my_tuple = (1, 2, 3)
list_from_tuple = list(my_tuple)
print(f"튜플 {my_tuple}을 리스트로: {list_from_tuple}")
# 출력: 튜플 (1, 2, 3)을 리스트로: [1, 2, 3]
4.2. tuple(): 튜플로 변환
tuple() 함수는 반복 가능한 객체를 튜플로 변환합니다.
# 리스트 -> 튜플
my_list = ['a', 'b', 'c']
tuple_from_list = tuple(my_list)
print(f"리스트 {my_list}을 튜플로: {tuple_from_list}")
# 출력: 리스트 ['a', 'b', 'c']을 튜플로: ('a', 'b', 'c')
# 문자열 -> 튜플
text = "Hello"
tuple_from_str = tuple(text)
print(f"문자열 \"{text}\"을 튜플로: {tuple_from_str}")
# 출력: 문자열 "Hello"을 튜플로: ('H', 'e', 'l', 'l', 'o')
4.3. set(): 셋으로 변환
set() 함수는 반복 가능한 객체를 셋으로 변환합니다. 셋은 중복된 요소를 허용하지 않으므로, 변환 과정에서 중복이 제거됩니다.
# 리스트 -> 셋 (중복 제거)
numbers = [1, 2, 2, 3, 4, 4, 5]
set_from_list = set(numbers)
print(f"리스트 {numbers}을 셋으로: {set_from_list}")
# 출력: 리스트 [1, 2, 2, 3, 4, 4, 5]을 셋으로: {1, 2, 3, 4, 5}
# 문자열 -> 셋 (중복 문자 제거)
text = "programming"
set_from_str = set(text)
print(f"문자열 \"{text}\"을 셋으로: {set_from_str}")
# 출력: 문자열 "programming"을 셋으로: {'g', 'i', 'o', 'p', 'r', 'a', 'm', 'n'}
4.4. dict(): 딕셔너리로 변환
dict() 함수는 키-값 쌍의 시퀀스(예: 튜플의 리스트, 리스트의 튜플)를 딕셔너리로 변환합니다.
# 키-값 쌍의 리스트 -> 딕셔너리
pairs = [("name", "Alice"), ("age", 30)]
dict_from_pairs = dict(pairs)
print(f"쌍 리스트 {pairs}을 딕셔너리로: {dict_from_pairs}")
# 출력: 쌍 리스트 [('name', 'Alice'), ('age', 30)]을 딕셔너리로: {'name': 'Alice', 'age': 30}
# 키워드 인자를 이용한 딕셔너리 생성
dict_from_keywords = dict(city="Seoul", country="Korea")
print(f"키워드 인자를 이용한 딕셔너리: {dict_from_keywords}")
# 출력: 키워드 인자를 이용한 딕셔너리: {'city': 'Seoul', 'country': 'Korea'}
5. 자료형 변환 시 주의사항
자료형 변환은 매우 유용하지만, 몇 가지 주의해야 할 점이 있습니다.
ValueError: 숫자로 변환할 수 없는 문자열을int()나float()로 변환하려고 하면ValueError가 발생합니다. (예:int("hello"),float("abc"))TypeError: 호환되지 않는 자료형을 변환하려고 하면TypeError가 발생합니다. (예:int([1, 2]))- 데이터 손실: 실수를 정수로 변환할 때는 소수점 이하가 버려지므로 데이터 손실이 발생할 수 있습니다.
- 셋(Set) 변환 시 중복 제거: 리스트나 튜플을 셋으로 변환하면 중복된 요소가 자동으로 제거됩니다. 이는 의도된 동작이지만, 데이터 손실로 이어질 수 있으므로 주의해야 합니다.
6. 결론: 데이터 처리의 유연성을 높이는 자료형 변환
이 챕터를 통해 여러분은 파이썬에서 자료형을 변환하는 다양한 방법과 그 중요성에 대해 깊이 있게 학습했습니다. int(), float(), str()과 같은 기본적인 변환 함수부터 list(), tuple(), set(), dict()와 같은 컬렉션 자료형 변환까지 살펴보았습니다. 또한, 자료형 변환 과정에서 발생할 수 있는 ValueError나 TypeError와 같은 오류, 그리고 데이터 손실 가능성에 대한 주의사항도 이해했습니다.
자료형 변환은 파이썬 프로그래밍에서 데이터를 유연하게 처리하고, 다양한 함수나 연산에 적합한 형태로 데이터를 가공하는 데 필수적인 기술입니다. 사용자로부터 입력받은 데이터를 처리하거나, 파일에서 읽어온 데이터를 분석하거나, 특정 형식에 맞춰 데이터를 출력하는 등 거의 모든 실제 프로그램에서 자료형 변환은 빈번하게 사용됩니다.
이제 여러분은 파이썬의 기본적인 자료형들을 자유자재로 변환할 수 있는 능력을 갖추게 되었습니다. 다음 챕터부터는 파이썬의 핵심적인 제어문인 ‘조건문(Conditional Statement)’에 대해 본격적으로 학습할 것입니다. 조건문은 프로그램이 특정 조건에 따라 다른 동작을 수행하도록 하는 논리적 판단의 기반이 되므로, 오늘 배운 자료형 변환 기술을 활용하여 다양한 데이터를 처리하는 연습을 꾸준히 해보세요!
