brunch

You can make anything
by writing

C.S.Lewis

by 김창현 Jun 27. 2023

파이썬의 자료형이 재밌는 이유

문자와 정수는 영원히 더할 수 없나요? 

파이썬 뿐만 아니라 모든 언어는 변수로 저장된다. 

예를 들어 

>>> a  = "나는 솔로"

라고 한다면 자동으로 str 즉 문자열로 저장된다. 

>>> type(a) 
<class 'str'>

이런 장난도 해볼 수 있다. 

>>> b=  3
>>> b + 3
6

b에 3이라고 입력하면 b를 int 즉 정수라고 입력하게 되고, 자연스럽게 b + 3 은 6이라고 계산한다. 

그런데 이 상황에서 바로 a와 b를 더하면 어떻게 될까? 

>>> a+b

아래와 같은 TypeError가 발생한다. 파이썬에서 발생하는 가장 흔한 오류 중 하나이다. a(문자열)과 b(정수형)을 더할 수 없기 때문에 발생하는 문제이다. 

Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    a+b
TypeError: can only concatenate str (not "int") to str

이 경우 b 가 3이라는 정수이니 문자열로 바꿔주는 방법이 있다. 정수형을 문자열로 바꿔주기 위해서는 str함수를 사용한다. 

>>> a+str(b)
'나는 솔로3'

이와 같은 문제는 의외로 print할 때 잘 발생한다. 

a와 b에 대한 유형(type)이 무엇인지 모르는 상태에서 다음과 같이 명령한다 가정하자. 

>>> print(a + b)
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
    print(a + b)
TypeError: can only concatenate str (not "int") to str

당연히 오류가 발생한다. 여기서도 마찬가지로 b를 str(b)로 바꿔주는 방식으로 문제를 해결할 수 있을 것이다. 그런데 1부터 9까지 나는 솔로를 추가하고 싶다면? 파이썬 3.6 이상에서는 다음과 같은 문법을 지원한다. 

>>> for i in range(1,10):
    print(f'나는 솔로 {i}')     # 따옴표 앞에 f를 붙이면 {}중괄호 안에 변수를 그대로 넣어도 된다.
나는 솔로 1
나는 솔로 2
나는 솔로 3
나는 솔로 4
나는 솔로 5
나는 솔로 6
나는 솔로 7
나는 솔로 8
나는 솔로 9

이와 같은 문법은 str(i)를 만드는 방법보다 훨씬 직관적이며 편리하다. 

재밌는 점은 문자와 정수가 더하기는 안되지만 곱하기는 된다는 점이다. 

>>> a*b
'나는 솔로나는 솔로나는 솔로'

곱하기를 하면 a(나는 솔로)가 곱하기 횟수 만큼 더해진다. 그래서 이러한 경우는 타입오류를 일으키지 않는다. 

이렇게 파이썬에서 타입오류를 발생시키는 이유는 간단하다. 오류를 일으켜야 로직의 문제점을 드러낼 수 있기 때문이다. 프로그래머가 실수로 정수와 문자를 더하게 만들었다면, 같은 타입으로 만들어 주거나 다른 조치를 취하도록 해주어야 한다. 그렇지 않으면, 오류를 가진 프로그램이 계속 돌아가면서 더 큰 문제를 만들어낼 것이다. 실제로 오류가 어디서 발생하는지 모르는 프로그램을 다룬다는 것은 끔찍하다. 프로그램의 규모가 커지면 커질수록 오류를 발견해내는 것은 점점 더 쉽지 않은 일이기 때문이다. 


파이썬(뿐만 아니라) 오류(Error)는 골칫거리이기도 하지만, 내 프로그램이 어떤 논리적 결함을 가지고 있는지 피드백해주는 소중한 존재이기도 하다. 


(오류)-(해결)-(오류)-(해결)-(오류)-(해결) 


이와 같은 무한루프를 겪다보면 여러분도 어느 새 프로그래밍을 할 수 있는 사람이 되어 있을 것이다. 



브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari