- 앞에서 배웠던, 기본 자료형을 통해 입력받았던 파이썬 자료의 유형이 무엇인지 확인하고, 다른 자료 유형으로 변환하는 방법에 대해서 알아본다.
- 파이썬 데이터 터리 중에 특정 값의 타입을 필요에 다라 적절하게 변환하여 연산을 수행할 때 사용하는 것으로, 여러 자료를 사용해야 하는 입장에서는 매우 유용한 기능이다.
자료형 확인 및 변환과정은 파이썬 프로그래밍에서 사용하는 데이터를 효과적으로 처리하는데 중요한 부분으로, 파이썬은 동적 타이핑 개발 언어이기 때문에 변수에 저장된 값의 자료형을 명시하지 않아도 알아서 상황에 맞게 자동으로 처리한다.
아래는 `C++`에서 사용되는 자료형 변수 선은 방법이다.
// C++에서의 변수 설정 예
int var = 10; // 정수형 변수 선언
float var1 = 3.14; //실수형 변수 선언
char var2 = "돌출과 회전"; //문자열 변수 선언
와 같이 변수 앞에 무슨 자료형을 사용하는지, 일일이 지정해야 하지만, 파이썬은 앞에서 공부하고 연습한 것과 같이 특별한 자료형을 지정하지 않고, `변수명 = 값`으로만 지정하면 알아서 자료 타입을 결정해 주는 것이다.
하지만, 수시로 변화되는 사항에 따라 데이터 타입을 확인하거나, 자료의 형식을 변경해서 사용해야 하는 경우가 자주 발생하는데, 타입 확인과 자료를 변환하는 방법에 대해서 이번 시간 공부해 볼 것이다.
type() 함수로 자료형 확인하기
파이썬에서 변수에 들어 있는 자료가 어떤 유형인지 확인하려면 `type()`합수를 사용해서 확인하며, 이 함수는 인자*로 전달된 값의 자료형을 반환(리턴)하게 된다.
type() 함수 사용방법
var = 20
print(type(var)) # <class 'int'>
자료 타입 확인을 위한 type() 함수 사용방법은 굉장히 쉽고, 위에서 보듯이 변수 `var`에 저장된 값이 정수형이기 때문에 `type()`함수는 정수형 자료라는 것을 `<class 'int'>`로 보여주게 된다.
파이썬에서 주요 자료형은 우리가 앞에서 배웠던, `int / 문자형`, `float / 실수형`, `str / 문자열형`, `bool / 불리언형` 등과 앞으로 배우게 되는 `list / 리스트`, `tuple / 튜플`, `dict / 딕셔너리`, `set / 집합` 이 기본적으로 제공되고 있으며, 가장 많이 사용되고 있다.
※ 혹시 앞에서 배웠던 기본 자료형이 기억나지 않는다면, 다시 공부하고 넘어와야 한다.^^
각종 자료형 확인 예시
var_1 = 10
var_2 = 3.14
var_3 = "돌출과 회전"
var_4 = [1, 2, 3]
print(type(var_1)) # <class 'int'>
print(type(var_2)) # <class 'float'>
print(type(var_3)) # <class 'str'>
print(type(var_4)) # <class 'list'>
<class 'int'>
<class 'float'>
<class 'str'>
<class 'list'>
이러한 `type()`함수는 직접적인 코딩에서 사용한다기보다는 주로 디버깅*이나 복잡한 로직*에서 변수의 자료 타입을 명확히 하고 싶을 때 주로 사용하는 것이기 때문에, 지금은 잊어버려도 큰 문제가 없지만, 실질적인 코딩에서는 사람의 기억에는 한계가 있기 때문에 수시로 찍어 봐야 할 것이다.^^
인자(Argument) 란?
함수를 호출할 때 해당 `함수로 전달되는 값`을 뜻하는 것으로, 함수는 이러한 인자를 값으로 받은 후, 눈으로 보이지 않는 곳에서 처리한 결과를 돌려주는 것을 `반환` 또는 `리턴`이라고 한다.
디버깅(Debugging) 이란?
프로그래밍하는 과정에서 발생하는 오류(버그)를 찾아내고, 그 오류를 수정하는 작업을 말하는 것으로, 논리적 오류, 구문 오류 도는 실행 중의 문제점을 해결하기 위한 필수적인 과정이고, `type()`함수가 디버깅에 사용된다는 의미는 `논리적인 오류`를 찾기 위해서 사용한다는 것이다.
로직(Logic) 이란?
코딩에서 어떤 문제를 해결하기 위한 일련의 절차나 흐름을 논리적으로 접근하는 것을 의미하며, 보통의 경우 주어진 입력을 처리하고, 원하는 결과를 얻기 위해서 다라야 하는 방법과 절차를 의미한다.
이 로직에 관련해서는 나중에 따로 공부하게 될 것이다.
자료형 변환하기 (Type Casting)
파이썬에서 변수의 자료형을 다른 자료형으로 변환하는 것은 파이썬이 제공하는 여러 가지 내장 함수들을 이용하면, 매우 간단하고 쉽게 자료형을 변환할 수 있으며, 우리는 이것을 `형 변환(Type Casting)`라고 한다.
주요 형 변환 함수
변환 내장 함수 | 설명 |
`int()` | 변수 값을 `정수형으로 변환`하는 함수 |
`float()` | 변수 값을 `실수형으로 변환`하는 함수 |
`str()` | 변수 값을 `문자열형으로 변환`하는 함수 |
`bool()` | 변수 값을 `불리언형으로 변환`하는 함수 |
`list()` | 변수 값을 `리스트형으로 변환`하는 함수 |
`tuple()` | 변수 값을 `튜플형으로 변환`하는 함수 |
`dict()` | 변수 값을 `딕셔너리형으로 변환`하는 함수 |
`set()` | 변수 값을 `집합형으로 변환`하는 함수 |
위 내용은 파이썬이 기본적으로 제공하는 자료형 변환 내장 함수들이고, 우리가 앞에서 배웠던 `int()`, `float()`, `str()`, `bool()` 에 대한 변환 방법을 알아보고, 나머지 `list()`, `tuple()`, `dict()`, `set()`는 나중에 자료 구조에서 공부하도록 하자.
숫자형 (정수형 `int()`, 실수형 `float()`) 변환 방법
# 문자열형으로 이루어진 숫자를 변환
var_txt = "1234"
type_var = int(var_txt) # 문자열을 숫자를 정수로 변환
print(type_var, type(type_var)) # 결과 : 1234 <class 'int'>
숫자로만 이루어진 문자열형으로 대입된 `var_txt`변수를 `int(var_txt)`함수의 인수로 넣어 정수형으로 변경된 상태로 값을 반환한다.
# 정수형을 실수형으로 변환
var_int = 15
type_var = float(var_int) # 정수 값을 실수로 변환
print(type_var, type(type_var)) # 결과 : 15.0 <class 'float'>
마찬가지로, 정수형으로 대입된 `var_int`변수를 `float(var_int)`함수의 인수로 넣어 실수형으로 변경된 상태로 반환하며, 값을 정수형으로 변경할 때 `int()`함수를 실수료 변경할 때는 `float()`함수를 사용한다.
정수와 실수 간 변환
# 정수와 실수를 간 변환
var_int = 15
var_flot = 14.22
type_var1 = float(var_int) # 정수를 실수로 변환
type_var2 = int(var_flot) # 실수를 정수로 변환
print(type_var1, type(type_var1)) # 결과 : 15.0 <class 'float'>
print(type_var2, type(type_var2)) # 결과 : 14 <class 'int'>
정수로 이루어진 값을 `float()`로 변환하면 정수의 값에 소수점이 추가되어 반환하고, 반대로 실수로 이루어진 값을 `int()`로 변환하면 소수점 부분은 버려진다.
문자열형(`str()`)으로 변환
# 숫자형을 문자열형으로 변환
var_int = 15
var_float = 14.22
type_txt1 = str(var_int) # 정수를 문자로 변환
type_txt2 = str(var_float) # 실수를 문자로 변환
print(type_txt1, type(type_txt1)) # 결과 : 15 <class 'str'>
print(type_txt2, type(type_txt2)) # 결과 : 14.22 <class 'str'>
정수형으로 대입된 `var_int`변수와 실수형으로 대입된 `var_float`변수를 `str(var_int)`, `str(var_float)`함수의 인수로 넣어 정수와 실수를 각각 문자열형으로 변경된 상태로 반환하며, 값을 문자열형으로 변경할 때 `str()`함수를 사용한다.
불리언(`bool()` 함수) 변환
불리언 변환은 특별하게 값을 변환하는 내용은 아니며, 우리가 앞에서 자료형 공부할 때 배웠던 bool() 함수의 내용과 같으며, 다시 한번 더 설명하면, `bool()`함수는 자료 값의 내용에 따라 `참(True)` 또는 `거짓(False)` 여부를 판단하고 값을 평가하는 내용이다.
print(bool(0)) # False
print(bool(1234)) # True
print(bool("")) # False
print(bool("esajin")) # True
값이 있으면 `True`, 값이 `0`이나 `""`등과 같이 값이 없거나 비어 있으면 `False`로 평가해서 출력한다.
※ `" "`과 같이 따옴표 내부에 `공백`도 문자열로 인식함으로, `공백`만 있으면 `True`로 평가한다.
잘못된 변환은 곧 오류
자료형 변환할 때 불가능한 값을 변환하려고 하면 오류가 발생하는데, 대표적인 것이 문자열형을 숫자형으로 변경할 때 자주 발생하는데, 아래 예시를 통해 알아보자.
# 오류가 발생하는 변환
var_txt = "esajin.kr"
type_var = int(var_txt) # 문자열을 정수로 변환
print(type_var, type(type_var))
# 자료형 변환 오류 발생
ValueError: invalid literal for int() with base 10: 'esajin.kr'
위와 같은 경우, 변환될 변수의 값이 `전부 문자열`로 이루어져 있기 때문에, `ValueError`를 표시한다.
# 오류가 발생하는 변환
var_txt = "a1234"
type_var = int(var_txt) # 문자열을 정수로 변환
print(type_var, type(type_var))
# 자료형 변환 오류 발생
ValueError: invalid literal for int() with base 10: 'a1234'
위의 내용도 마찬가지로, 변환될 변수의 값이 `문자와 숫자가 같이 포함`되어 있는 문자열형이기 때문에, `ValueError`를 표시한다.
이와 같이 자료형을 변환할 때는 변수에 대입되는 값의 형태에 따라서 변환되는 것도 있고, 불가능한 경우도 있으며, `ValueError`은 파이썬에서 특정 값이 함수나 연산에서 요구하는 `자료 타입`이나 `형식`이 맞지 않을 때 발생하는 오류이며, `유효하지 않는 값`이 함수에 전달되었을 때 나타나는 오류메시지이다.
실습 예제
실습 1 : 자료형 확인하기
사용자가 입력한 값이 어떤 자료형을 가졌는지 확인해 보자. 꼭 숫자만 입력해서도 확인해 보기 바란다.
user_input = input("값을 입력하세요: ")
print("입력한 값의 자료형:", user_input, type(user_input))
참고 : 아직 배우지는 않았지만, `input()`함수는 사용자로부터 직접 자료를 입력받도록 하는 함수이며, 기본적으로는 `str`자료만 입력한다.
실습 2 : 자료형 변환하기
실습 1에서 사용자가 입력한 숫자 값이 숫자로 된 문자열형으로 되어 있는 것을 확인했을 것이지만, 그렇게 입력된 숫자 값을 2개로 곱한 후, 값을 출력하는 프로그램을 작성해 보자.
num_var = input("숫자형 문자열을 입력하세요: ")
num = int(num_var) # 문자열을 정수로 변환
result = num * 2
print("두 배로 계산된 값: %d" % result)
파이참을 이용한 코딩 및 결과 확인 방법
파이썬 코딩은 어디에서 작성해도 상관은 없지만, 우리가 처음 시작할 때부터 파이참으로 했기 때문에, 파이참을 통해서 `input()`함수가 있는 코딩 작업하는 것을 간단하게 소개한다.
- 코딩 창에서 위에 제시한 실습 코드를 입력한다.
- 코드가 완성된 후, `실행` 버튼을 클릭해서 프로그램을 실행한다.
- `input()`함수에 의해서 만들어진 입력 대기 문자가 나오면 원하는 `값을 입력`하고 `엔터` 한다.
- 프로그램에 의해서 계산된 결과 값이 정상적으로 나오는지 확인한다.
파이썬에서 자료형을 확인하고, 원하는 형태로 자료를 변환할 수 있다는 것은 매우 중요하다.
프로그램이 복잡해질수록 올바른 자료형을 사용하는 것이 중요하고, 이를 통해 오류를 방지하고 효율적인 코드를 작성할 수 있기 때문에, 간단하게 `type()` 함수로 입력되는 자료를 확인하고, 다양한 형태로 자료를 변환하는 방법을 많은 연습을 통해 꼭 익혀두자.
우리 같이 열심히 공부해 봅시다.
죽이 되는 것보다 밥이 되는 것을 목표로~~^^
위 내용은 공부하면서 이해한 내용과 단편적인 검색 지식으로 작성된 내용으로 글에 오류가 있을 수 있으며,
오류나 잘못된 정보가 있으면 언제든지 댓글 주시면 최대한 반영/수정하겠습니다.