Responsive Advertisement

파이썬 프로그래밍 - 자료형, 숫자 자료형과 변수에 대해 알아보기

이번 포스트에서는 자료형에 대해 이야기하려고 합니다. 자료형이 무엇인지 이해하기 위해 IDLE을 활용한 대화형 콘솔에서 프로그래밍을 해볼게요. 

대화형 콘솔 IDLE Shell

IDLE


IDLE이 어디 있는지 모르시겠다면 윈도우 키 옆 검색창에 IDLE라고 검색하면 됩니다. IDLE Shell은 한 줄씩 명령어를 처리하는 대화형 콘솔인데, 이를 이해하기 위해 기호에 유의하여 사칙연산을 해보려고 합니다. 프로그래밍 과정에서의 사칙연산 기호는 실제 수학의 기호와 조금 다른 것도 있어요. 다음과 같은 사칙연산의 기호를 알아두고 익숙해지도록 합시다.

사칙연산

  • 덧셈: +
  • 뺄셈: -
  • 곱셈: *
  • 나눗셈: /
  • 나눗셈의 몫: //
  • 나눗셈의 나머지: %
  • 제곱연산: **
사칙연산

위 이미지에서 왼쪽은 정수형의 계산, 가운데는 실수형의 계산, 오른쪽은 정수형과 실수형의 혼합 계산을 실행한 결과입니다. '#'으로 처리된 빨간 부분은 '주석'이라는 것인데, 프로그램 실행에는 아무 영향을 주지 않고 설명을 위해 프로그래머가 기록하는 내용입니다.

먼저, 정수형 계산의 결과를 보겠습니다. 검은 글씨가 사용자의 입력이고 파란 글씨가 IDLE가 반환한 출력값이에요. 대화형 콘솔로 간단한 계산을 명령하면 즉각적으로 처리해 주는 것입니다. 정수형은 수학 시간에 배우던 그 정수의 의미를 가지고 있는데, 실제 수학에서의 의미와 조금 다르기도 합니다. 프로그래밍에서의 정수는 실수와 대비되는 표현으로, 소수점 이하의 자료가 없는 숫자를 말해요. 수학에서는 실수 안에 정수가 포함되는데 말이죠. 자료의 형태에 따라 구분하는 것입니다. 정수형 자료를 이용한 계산의 수행결과는 당연히 정수형으로 출력됩니다.

중간에 있는 화면은 실수형 숫자의 계산입니다. 실수형 자료는 정수형과 달리 소수점 이하를 포함한 자료입니다. 수학적으로는 5와 5.0에 차이가 없지만 프로그래밍 과정에서는 서로 다른 자료형으로 구분됩니다. 그러니까, 정수형과 실수형은 수의 범위 차원에서의 개념이 아니라, 자료의 형태를 구분한다고 이해하시는 것이 적절합니다. 실수형 자료끼리의 계산결과는 마찬가지로 실수형으로 출력됩니다.

문제는, 두 자료형을 혼합하여 계산할 때 생깁니다. 자료의 형태가 서로 다른 자료를 계산하는 것은 좋은 프로그램은 아닙니다. 자료형을 통일해야 오류를 줄일 수 있어요. 어쨌든, 서로 다른 자료형이더라도 계산이 가능한 경우가 있는데, 정수형과 실수형의 사칙연산 결과는 실수형으로 출력되는 것을 확인했습니다.

정수형끼리의 계산 결과는 정수형, 실수형끼리의 계산은 실수형이었어요. 이렇게 자료의 형태를 일관성 있게 처리한다는 것은 자료의 형태를 중요하게 생각한다는 의미이기도 합니다. 프로그래밍 과정에서 자료의 형태를 자료형(data type)이라고 합니다. 프로그래머는 이 자료형에 유의하여 프로그래밍을 해야 하는데, 서로 다른 자료형의 연산은 정상적으로 처리되지 않는 경우도 있고 프로그래머의 의도와 다른 결과를 출력하게 될 수도 있기 때문입니다.

자료형

파이썬은 다른 프로그래밍 언어에 비해 자료형의 처리를 유연하게 하는 편입니다. 그럼에도 자료형의 형태와 경계는 여느 프로그래밍 언어와 마찬가지로 구분되고 있습니다. 이것은 자료형이 서로 엄격하게 구분되어 계산이 수행되어야 오류나 버그를 줄일 수 있기 때문이에요. 자료형을 잘 알고 있으면 완성도 높은 프로그램을 만드는 데 도움이 됩니다. 파이썬의 자료형에는 다음과 같은 것들이 있습니다.
  • 숫자 자료형
  • 문자열 자료형
  • 리스트 자료형
  • 튜플 자료형
  • 딕셔너리 자료형
  • 집합 자료형
  • 불 자료형
일단은 숫자 자료형, 문자열 자료형, 리스트 자료형에 대해 알아보게 될 거예요.

숫자 자료형

숫자 자료형은 말 그대로 숫자를 취급하는 자료 형태입니다. 위에서 연산을 수행했던 정수형과 실수형이 대표적인 자료형입니다. 수학에서의 수체계에서는 실수에 정수가 포함되지만, 프로그래밍 언어에서는 자료의 형태를 기준으로 실수형과 자료형을 구분하고 있어요. 자료의 형태를 구분함으로써 프로그램의 오류를 줄이고 일관성과 효율성을 도모할 수 있습니다.

  • 정수형: int형이라고도 합니다. 정수를 뜻하는 inteager의 약어입니다. 소수부(소수점 이하의 숫자)를 가지고 있지 않습니다. 음의 정수, 0, 양의 정수를 포함합니다. 
-213, 0, 213 등
  • 실수형: float형이라고도 합니다. 부동 소수점을 의미하는 Floating-point의 약식 표현입니다. 소수부를 가지고 있어요.
-2.13, 2.13, 2.13e-8 등(2.13e-8은 [2.13 x 10^-8]을 의미합니다.)

연산의 우선순위
자료형을 잘 알아야 한다는 것은 동일한 자료형끼리의 계산을 적절하게 수행하기 위해서입니다. 계산은 프로그래밍 과정에서 '연산'이라고 합니다. 그리고 이 연산에는 우선순위가 있습니다. 수학에서 사칙연산을 하려면 연산의 우선순위를 잘 지켜야 합니다. 덧셈과 뺄셈보다는 곱셈과 나눗셈을 먼저 하고, 괄호가 있을 때는 괄호를 먼저 계산해야 제대로 된 결과를 얻을 수 있듯이 말입니다. 프로그래밍 과정에도 이러한 연산의 우선순위가 있는데, 모든 것을 다 알지 못하더라도 자주 사용하게 될 사칙연산의 우선순위 정도는 알아두면 좋습니다. 다음 이미지에서 우선순위는 위에서 아래로 우선순위가 있습니다. 위쪽일수록 먼저 계산하는 연산자가 됩니다.

연산자 우선순위


변수

연산을 잘 수행하기 위해서 변수에 대해 알아야 합니다. 변수는 프로그래밍 과정에 아주 중요한 개념인데, 프로그래밍의 변수와 수학에서의 변수는 그 의미가 조금 다릅니다. 수학적으로는 상수와 반대되는 개념으로, 정해지지 않은 임의의 수, 변할 수 있는 값이라는 의미를 가지고 있어요. 반면에, 프로그래밍에서의 변수는 자료를 저장하기 위한 메모리의 의미를 가집니다. 어떤 값을 저장하기 위해 할당해 주는 공간입니다. "변수를 선언한다"는 의미는 "메모리 공간을 확보한다."라고 이해하면 좋습니다.

파이썬의 변수 선언은 다른 언어와 조금 다릅니다. 일반적으로 변수를 선언하기 위해서는 어떤 자료형을 사용할 변수인지를 명확하게 해주어야 해요. 예컨대, C언어에서 정수형 변수 'a'를 선언하고 숫자 5를 할당한다고 하면 다음과 같이 선언합니다.
int a = 5;
변수할당


a = 5;
빈 그릇에 a라고 이름을 붙이고 숫자 5를 저장합니다. 변수를 선언하고 변숫값을 할당하는 것이에요. 정수형으로 선언된 a는 정수형 데이터만 처리할 수 있는 변수가 됩니다. 만약에 a를 2로 나누게 되면 수학적으로는 2.5가 정답이지만 정수형 자료만을 표현할 수 있는 변수로 선언되었기 때문에 2.5가 아닌 2를 출력하게 됩니다. 파이썬은 어떨까요?

파이썬은 자료형을 따로 선언해주지 않습니다. 할당되는 자료에 따라 정수형인지, 실수형인지, 문자열형인지 그 자료형을 결정하게 됩니다. a를 2로 나눈 결과도 다음과 같아요.

정수형 실수형 계산

처음에 a에 정수형 5를 할당하고 출력해보니 5가 나왔습니다. 그리고 a=a/2라는 연산을 수행하는데, a를 2로 나눈 값을 다시 a에 할당하라는 의미에요. 프로그래밍에서의 등호는 왼쪽과 오른쪽이 같다는 의미가 아니라, '오른쪽의 값을 왼쪽 변수에 할당해라.'라는 의미이거든요. 그리고서 a를 출력했더니 처음에 정수형이었던 a가 실수형이 되어 2.5를 출력하는 것을 확인할 수 있습니다.

파이썬은 큰 무리가 없으면 자료의 형변환을 유연하게 처리하는 편입니다. 물론, 늘 그런 것은 아니고, 또 이런 것이 프로그래머에게 좋은 습관은 아닙니다. 프로그래밍 과정에서 어떤 자료형을 사용하고자 하는가를 계획적으로 사용해야 오류를 줄일 수 있거든요. 마지막으로 다음과 같은 연산을 수행해 보시고, 오늘의 내용을 마무리 하겠습니다.
연산 예베

마치며

변수를 활용할 때의 강점은 처리할 자료가 변경되는 경우에 변수에 할당되는 값만 변경해 주면 된다는 것입니다. 프로그래밍 중간에 계산에 사용되었던 모든 5가 10으로 변경되어야 하면 일일이 고칠 것이 아니라, 처음 변수 a에 5를 할당하고 사용하다가 a에 10을 할당하는 것으로 하나만 고치면 되거든요. 지금은 잘 체감되지 않겠지만, 조건문, 반복문, 함수 등 복잡한 프로그래밍이 시작되면 어떤 의미인지 알 수 있을 거예요.


{getContent} $results={5} $label={recent} $type={block}