2-2 숫자형 데이터: 정수와 실수 다루기

2-2 숫자형 데이터: 정수와 실수 다루기

← 목차로 돌아가기

썸네일

파이썬에서 숫자는 프로그래밍의 가장 기본적인 구성 요소 중 하나입니다. 이번 챕터에서는 파이썬이 숫자를 어떻게 다루는지, 특히 정수(Integer)와 실수(Float)라는 두 가지 주요 숫자형 데이터를 깊이 있게 살펴보겠습니다. 실제 예제를 통해 각 데이터 타입의 특징과 활용법을 익히고, 코드를 더 효율적으로 작성하는 데 필요한 기초 지식을 다지게 될 것입니다.

핵심 요약:

  • 정수(Integer): 소수점 없는 숫자.
  • 실수(Float): 소수점 있는 숫자(부동 소수점).
  • 사용법: 변수에 할당하고 사칙연산 가능.
  • 주의점: 실수는 미세한 오차가 발생할 수 있음.
  • 활용: 계산, 조건문, 반복문 등 모든 프로그래밍의 기본.

파이썬에서 숫자형 데이터는 왜 중요할까요?

파이썬에서 숫자형 데이터는 단순한 계산을 넘어, 프로그램의 논리와 흐름을 제어하는 핵심적인 역할을 합니다. 제가 10년 가까이 파이썬을 취미로 다루고 3년간 현업에서 데이터 분석과 자동화 업무를 하면서 느낀 점은, 아무리 복잡한 프로그램도 결국은 숫자와 문자를 다루는 기본적인 조작에서 시작한다는 것입니다. 온도 센서 값을 읽거나, 게임 캐릭터의 체력을 관리하거나, 은행 계좌 잔액을 계산하는 등 모든 상황에서 숫자는 필수적입니다. 파이썬은 이런 숫자들을 정수와 실수라는 형태로 명확하게 구분하여 다룹니다. 이 두 가지를 정확히 이해하는 것이 파이썬 프로그래밍의 견고한 기반을 다지는 첫걸음입니다.

정수(Integer)는 무엇인가요?

정수는 수학에서 말하는 정수와 동일하게 소수점 이하가 없는 숫자를 의미합니다. 파이썬에서는 양수, 음수, 0을 모두 정수로 표현할 수 있습니다. 예를 들어, `10`, `-5`, `0`, `12345`와 같은 숫자들은 모두 정수입니다. 파이썬은 정수의 크기에 제한이 없어 메모리가 허용하는 한 무한히 큰 정수도 표현할 수 있다는 장점이 있습니다. C나 Java 같은 다른 언어에서는 정수의 크기가 정해져 있는 경우가 많지만, 파이썬은 이런 걱정 없이 큰 숫자를 다룰 수 있어 특히 데이터 분석이나 암호화 같은 분야에서 편리합니다.

# 정수형 데이터 예시 (Python 3.11 기준)
정수1 = 10
정수2 = -500
정수3 = 0
거대_정수 = 123456789012345678901234567890

print(f"정수1: {정수1}, 타입: {type(정수1)}")
print(f"정수2: {정수2}, 타입: {type(정수2)}")
print(f"정수3: {정수3}, 타입: {type(정수3)}")
print(f"거대_정수: {거대_정수}, 타입: {type(거대_정수)}")

이 코드가 하는 일: 여러 정수를 변수에 할당하고, 각 변수의 값과 데이터 타입을 출력합니다. `type()` 함수는 특정 데이터의 타입을 알려주는 내장 함수입니다.

실수(Float)는 무엇인가요?

실수는 소수점 이하를 포함하는 숫자입니다. 보통 ‘부동 소수점(Floating-point number)’이라고도 부르며, 수학에서 실수에 해당하는 개념입니다. `3.14`, `-0.5`, `2.0` (정수처럼 보이지만 소수점이 있어 실수입니다) 등이 실수에 해당합니다. 실수는 과학 계산, 금융 데이터, 그래픽 처리 등 정밀한 계산이 필요한 곳에서 자주 사용됩니다. 컴퓨터는 실수를 이진수로 표현하기 때문에 때때로 미세한 오차가 발생할 수 있는데, 이는 산술 연산자를 사용할 때 특히 유의해야 할 부분입니다.

# 실수형 데이터 예시
실수1 = 3.14
실수2 = -0.001
실수3 = 2.0

print(f"실수1: {실수1}, 타입: {type(실수1)}")
print(f"실수2: {실수2}, 타입: {type(실수2)}")
print(f"실수3: {실수3}, 타입: {type(실수3)}")

이 코드가 하는 일: 여러 실수를 변수에 할당하고, 각 변수의 값과 데이터 타입을 출력합니다.

정수와 실수의 차이점은 무엇인가요?

가장 큰 차이점은 소수점의 유무와 저장 방식입니다. 정수는 소수점이 없고 정확한 값을 표현하는 반면, 실수는 소수점이 있으며 컴퓨터 내부에서는 특정 정밀도를 가진 근삿값으로 저장됩니다. 예를 들어, `10`은 정수이고, `10.0`은 실수입니다. 둘 다 같은 ‘십’이라는 값을 나타내지만, 파이썬에서는 다른 타입으로 인식합니다. 이러한 차이는 연산 결과나 메모리 사용량에 영향을 미칠 수 있습니다. 일반적으로 정수 연산이 실수 연산보다 빠르고 정확합니다.

숫자형 데이터는 어떻게 사용하나요?

숫자형 데이터는 변수에 저장하고 다양한 산술 연산에 활용하여 프로그램의 계산 로직을 구현하는 데 사용됩니다. 제 경험상, 파이썬으로 자동화 스크립트를 작성할 때 파일 개수를 세거나, 처리 시간을 측정하거나, 특정 조건에 따라 데이터를 필터링할 때 숫자는 늘 함께했습니다.

변수에 숫자 할당하기

숫자를 사용하기 위해서는 먼저 변수에 할당해야 합니다. 변수 선언과 할당: 데이터 저장의 기본 챕터에서 자세히 다루었듯이, `=` 연산자를 사용하여 변수 이름을 지정하고 그 값을 할당합니다.

# 변수에 숫자 할당 예시
나이 = 30
키 = 175.5

print(f"나이: {나이}")
print(f"키: {키}")

이 코드가 하는 일: `나이` 변수에는 정수를, `키` 변수에는 실수를 할당하고 그 값을 출력합니다.

산술 연산 수행하기

파이썬은 기본적인 사칙연산을 포함한 다양한 산술 연산자를 제공합니다. `+` (더하기), `-` (빼기), `*` (곱하기), `/` (나누기), `//` (정수 나누기), `%` (나머지), `**` (거듭제곱) 등이 있습니다.

# 산술 연산 예시
a = 10
b = 3

print(f"a + b = {a + b}")  # 더하기
print(f"a - b = {a - b}")  # 빼기
print(f"a * b = {a * b}")  # 곱하기
print(f"a / b = {a / b}")  # 나누기 (결과는 항상 실수)
print(f"a // b = {a // b}") # 정수 나누기 (몫만 구함)
print(f"a % b = {a % b}")  # 나머지
print(f"a ** b = {a ** b}") # 거듭제곱

이 코드가 하는 일: 두 숫자 변수에 대해 다양한 산술 연산을 수행하고 결과를 출력합니다.

타입 변환의 필요성

때로는 정수를 실수로, 또는 실수를 정수로 바꿔야 할 때가 있습니다. 이럴 때는 `int()`, `float()` 함수를 사용하여 데이터 타입을 변환할 수 있습니다. 예를 들어, 사용자에게 입력받은 문자열 숫자를 계산에 사용하려면 데이터 타입 변환: int(), float(), str() 활용 챕터에서 설명했듯이 숫자로 변환해야 합니다. 제가 GUI 애플리케이션을 개발할 때(tkinter 사용), 사용자 입력은 항상 문자열로 들어오기 때문에 `int()`나 `float()`로 변환하는 작업은 필수적입니다.

# 타입 변환 예시
정수_값 = 100
실수_값 = 3.78

정수_to_실수 = float(정수_값) # 정수를 실수로
실수_to_정수 = int(실수_값)   # 실수를 정수로 (소수점 이하 버림)

print(f"정수_to_실수: {정수_to_실수}, 타입: {type(정수_to_실수)}")
print(f"실수_to_정수: {실수_to_정수}, 타입: {type(실수_to_정수)}")

문자열_숫자 = "42"
문자열_to_정수 = int(문자열_숫자)
print(f"문자열_to_정수: {문자열_to_정수}, 타입: {type(문자열_to_정수)}")

이 코드가 하는 일: 정수, 실수, 문자열을 서로 다른 숫자형 타입으로 변환하고 결과를 출력합니다.

숫자형 데이터를 다룰 때 주의할 점은 무엇인가요?

실수 연산에서 발생하는 부동 소수점 오차는 예측하기 어려운 결과를 초래할 수 있으므로 항상 염두에 두어야 합니다. 저도 처음에는 이 오차 때문에 데이터 분석 결과가 미묘하게 달라져서 꽤 헤맸던 기억이 있습니다. 특히 금융 관련 계산에서는 이 점이 매우 중요합니다.

부동 소수점 오차 이해하기

컴퓨터는 2진법으로 숫자를 표현하기 때문에, 10진법의 일부 실수는 2진법으로 정확하게 표현할 수 없습니다. 이로 인해 미세한 오차가 발생하는데, 이를 ‘부동 소수점 오차’라고 합니다. 예를 들어, `0.1 + 0.2`는 우리가 예상하는 `0.3`이 아니라 `0.30000000000000004`와 같이 미세한 차이를 보일 수 있습니다.

# 부동 소수점 오차 예시
print(0.1 + 0.2)
print(0.1 + 0.2 == 0.3) # 예상과 다른 결과

# 오차를 최소화하는 방법 (Decimal 모듈 사용)
from decimal import Decimal

print(Decimal('0.1') + Decimal('0.2'))
print(Decimal('0.1') + Decimal('0.2') == Decimal('0.3'))

이 코드가 하는 일: 일반 실수 연산에서 발생하는 오차를 보여주고, `Decimal` 모듈을 사용하여 오차를 줄이는 방법을 제시합니다.

정확한 계산이 필요한 경우 `decimal` 모듈의 `Decimal` 타입을 사용하거나, 소수점 이하를 반올림하는 등의 방법을 활용해야 합니다. 하지만 대부분의 일반적인 프로그래밍에서는 기본 `float` 타입으로도 충분합니다.

큰 숫자 다루기

파이썬 정수는 크기 제한이 없지만, 너무 큰 숫자를 다룰 때는 연산 속도나 메모리 사용량이 증가할 수 있습니다. 일반적인 정밀도 이상의 실수가 필요하다면, `math` 모듈이나 NumPy 같은 외부 라이브러리를 활용할 수 있습니다. 제가 pandas로 대규모 데이터셋을 다룰 때, 숫자의 크기가 너무 커지면 데이터 타입 최적화를 고려해야 했습니다. 하지만 파이썬 기본 기능만으로도 대부분의 상황은 충분히 커버 가능합니다.

마무리하며

이번 챕터에서는 파이썬의 핵심 숫자형 데이터인 정수와 실수의 개념, 사용법, 그리고 주의할 점에 대해 알아보았습니다. 숫자는 모든 프로그래밍의 기초이자 가장 자주 사용되는 데이터 타입입니다. 이 개념들을 잘 이해하고 나면 다음 챕터에서 다룰 문자열이나 다른 복잡한 데이터 구조들을 훨씬 쉽게 배울 수 있을 것입니다. 직접 코드를 실행해 보면서 숫자형 데이터의 동작 방식을 몸으로 익히는 것이 중요합니다. 파이썬을 학습하는 여러분의 여정을 응원합니다!

FAQ

Q1: 파이썬에서 숫자를 0으로 나눌 경우 어떻게 되나요?

A1: 파이썬에서 숫자를 0으로 나누려고 하면 `ZeroDivisionError`가 발생합니다. 이는 수학적으로 정의되지 않는 연산이기 때문에 프로그램이 오류를 발생시키고 종료됩니다. 이럴 때는 예외 처리(예외 처리 기본: try-except-finally 블록)를 통해 프로그램이 강제로 종료되지 않도록 방지할 수 있습니다.

Q2: 정수와 실수 타입을 언제 구분해서 사용해야 하나요?

A2: 소수점 이하의 정확한 값이 필요 없는 경우에는 정수를 사용하는 것이 좋습니다. 예를 들어, 개수, 나이, 순번 등은 정수가 적합합니다. 반면, 길이, 무게, 온도, 돈(정확한 소수점 처리가 중요할 경우 Decimal 모듈 고려)과 같이 소수점 이하 값이 중요한 경우에는 실수를 사용합니다. 성능 측면에서는 정수 연산이 일반적으로 실수 연산보다 빠릅니다.

Q3: 파이썬에서 큰 숫자를 더 쉽게 읽을 수 있는 방법이 있나요?

A3: 네, 파이썬 3.6부터는 숫자 리터럴에 언더스코어(`_`)를 사용하여 자릿수를 구분할 수 있습니다. 이는 숫자의 값에는 영향을 주지 않고 가독성만 높여줍니다. 예를 들어, `1_000_000`은 `1000000`과 동일하게 처리됩니다.

# 큰 숫자 가독성 높이기
백만 = 1_000_000
print(백만)

참고 자료

  1. [1] Python 공식 튜토리얼 — 파이썬 훑어보기 — https://docs.python.org/ko/3/tutorial/introduction.html
  2. [2] Python 표준 라이브러리 — 내장 자료형 — https://docs.python.org/ko/3/library/stdtypes.html

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다