지난 포스팅에서는 f-string을 이용해 데이터를 보기 좋게 포장하는 법을 배웠습니다. 이제 여러분은 변수를 만들고, 연산하고, 출력하는 법까지 꽤 많은 것을 익혔습니다.
그런데 우리가 프로그램을 만들다 보면, 사용자가 키보드로 입력한 값을 받아서 계산해야 할 때가 있습니다. 이때 초보자들이 100% 마주하는 당황스러운 상황이 하나 있습니다. 분명 숫자를 입력했는데, 더하기가 안 되고 에러가 나거나 글자가 이어 붙여지는 현상입니다.
이것은 파이썬이 "입력받은 모든 데이터를 일단 '문자열'로 취급"하기 때문입니다. 그래서 우리는 상황에 맞게 데이터의 옷을 갈아입혀 주는 기술, 즉 '자료형 변환(Type Casting)'을 반드시 배워야 합니다. 이 글 하나면 더 이상 TypeError 때문에 머리 싸맬 일은 없을 것입니다.

1. 자료형 변환(Type Casting)이란?
자료형 변환은 말 그대로 데이터의 타입(Type)을 다른 타입으로 강제로 바꾸는 것을 말합니다. 마치 배우가 역할에 따라 의상을 갈아입듯, 데이터도 필요에 따라 숫자에서 문자로, 문자에서 숫자로 변신해야 할 때가 있습니다.
왜 필요한가요? (대표적인 문제 상황)
파이썬에서 사용자 입력을 받는 input() 함수를 사용해 봅시다.
age = input("나이를 입력하세요: ") # 사용자가 20을 입력한다고 가정
print(age + 1) # 내년 나이를 구하고 싶다!
위 코드를 실행하면 TypeError: can only concatenate str (not "int") to str이라는 에러가 발생합니다. 사용자가 입력한 20은 숫자 20이 아니라, 문자 "20"으로 저장되기 때문입니다. 문자 "20"에 숫자 1을 더하라고 하니 컴퓨터가 "글자에 숫자를 어떻게 더해?"라고 거부하는 것입니다.
2. 문자를 숫자로 바꾸기 (int, float)
계산을 하려면 문자열이라는 껍데기를 벗기고 진짜 숫자로 만들어줘야 합니다. 이때 사용하는 함수는 int()와 float()입니다.
(1) 정수로 변환: int()
문자열을 정수(Integer)로 바꿉니다. 괄호 안에 바꿀 문자열을 넣어주면 됩니다.
str_num = "100"
real_num = int(str_num) # "100" -> 100
print(real_num + 50) # 결과: 150 (계산 성공!)
(2) 실수로 변환: float()
문자열을 소수점이 있는 실수(Floating point)로 바꿉니다.
str_pi = "3.14"
real_pi = float(str_pi) # "3.14" -> 3.14
print(real_pi * 2) # 결과: 6.28
(3) ★주의: 변환할 수 없는 것을 변환하려 할 때 (ValueError)
가장 중요한 부분입니다. int()나 float()는 "누가 봐도 숫자로 생긴 문자"만 바꿀 수 있습니다.
int("Hello")-> 에러! (영어를 숫자로 바꿀 수 없음)int("3.14")-> 에러! (소수점이 있는 문자는 바로 정수로 못 바꿈.float()을 먼저 써야 함)
이때 발생하는 에러가 바로 ValueError입니다. 데이터의 '값(Value)'이 변환하기에 적절하지 않다는 뜻입니다.
3. 숫자를 문자로 바꾸기 (str)
반대로 숫자를 문자로 바꿔야 할 때도 있습니다. 주로 문자열끼리 연결(Concatenation)할 때 사용합니다. 앞선 포스팅에서 f-string을 추천했지만, 기초 원리를 아는 것은 중요합니다.
문자열 변환: str()
어떤 데이터든 str() 괄호 안에 넣으면 문자열로 변합니다.
score = 95
# message = "점수: " + score -> 에러 발생 (문자 + 숫자 불가)
message = "점수: " + str(score) # 95 -> "95"로 변환
print(message) # 결과: 점수: 95
4. 실전 미니 프로젝트: 출생 연도로 나이 계산기
지금까지 배운 input(), int(), str(), 그리고 연산자를 총동원하여 간단하지만 유용한 프로그램을 만들어 보겠습니다. VS Code를 열고 직접 따라 해 보세요.
(1) 코드 작성
# 1. 사용자에게 태어난 연도를 입력받습니다. (이때 입력값은 문자열입니다)
input_year = input("태어난 연도를 입력하세요(예: 1990): ")
# 2. 계산을 위해 문자열을 정수로 변환합니다. (Type Casting)
birth_year = int(input_year)
# 3. 현재 연도를 기준으로 나이를 계산합니다. (2024년 기준, 한국식 나이)
current_year = 2024
age = current_year - birth_year + 1
# 4. 결과를 출력합니다.
print(f"당신의 나이는 {age}세 입니다.")
(2) 코드 분석
이 짧은 코드 안에 프로그래밍의 핵심 3단계인 입력(Input) - 처리(Process) - 출력(Output)이 모두 들어있습니다. 특히 2번 단계에서 int()를 사용하지 않았다면 3번 계산 단계에서 100% 에러가 났을 것입니다.
5. 심화: 실수 모양의 문자를 정수로 바꾸려면?
가끔 크롤링(데이터 수집)을 하다 보면 "3.5", "10.0" 같이 소수점이 포함된 문자를 정수로 바꿔야 할 때가 있습니다.
s = "3.14"
# n = int(s) -> ValueError 발생!
이럴 때는 두 번의 과정을 거쳐야 합니다. 먼저 실수로 바꾸고, 그다음 정수로 바꿔야 합니다.
s = "3.14"
f = float(s) # 3.14 (실수)
n = int(f) # 3 (정수, 소수점 버림)
print(n)
이 과정은 데이터 분석 전처리 과정에서 매우 빈번하게 사용되는 테크닉이므로 꼭 기억해 두시기 바랍니다.
6. 결론: 데이터의 본질을 꿰뚫어 보자
오늘은 자료형 변환(Casting)에 대해 알아보았습니다. 겉보기에는 숫자 123처럼 보여도, 따옴표로 감싸져 있다면 컴퓨터에게는 그저 그림 같은 문자일 뿐이라는 사실을 명심해야 합니다.
자료형을 자유자재로 다룰 수 있게 되었다면, 이제 단 하나의 데이터가 아니라 '여러 개의 데이터'를 한꺼번에 다룰 준비가 되었습니다. 다음 포스팅에서는 파이썬에서 가장 강력하고 자주 쓰이는 자료구조인 '리스트(List)의 특징과 필수 함수 5가지'에 대해 자세히 알아보겠습니다. 드디어 데이터 꾸러미를 다루게 되네요!