Python 변수와 데이터 타입 완전 정리: int, float, str, bool, None

2026. 6. 12. 16:50Developer/Python

반응형

Python에서 변수를 만드는 데 특별한 선언이 필요 없습니다. 값을 할당하면 변수가 생기고, 타입도 자동으로 정해집니다. 이 글에서는 Python의 변수 사용법과 5가지 기본 데이터 타입을 하나씩 정리합니다.

핵심 요약

  • Python은 별도의 타입 선언 없이 x = 10처럼 값을 할당하면 변수가 만들어집니다.
  • 기본 데이터 타입 5가지: int(정수), float(소수점 숫자), str(문자열), bool(참/거짓), None(값 없음).
  • type()으로 "이 변수가 어떤 타입인지" 확인할 수 있습니다.
  • Python의 int는 아무리 큰 숫자도 담을 수 있고, float는 소수점 계산에 미세한 오차가 있을 수 있습니다.
  • None은 "아직 값이 정해지지 않았음"을 표현할 때 사용합니다.

1. 변수: 값에 이름 붙이기

변수는 값에 이름을 붙이는 것입니다. 수학에서 "x = 5"라고 쓰듯이, Python에서도 같은 방식으로 변수를 만듭니다.

x = 42
name = "Alice"
pi = 3.14

이게 전부입니다. Java나 C처럼 int x = 42라고 타입을 선언할 필요가 없습니다. Python이 값을 보고 알아서 타입을 결정합니다.

변수는 언제든 다른 값을 담을 수 있다

x = 10       # 처음에는 정수
x = "hello"  # 나중에 문자열로 바꿔도 에러 없음
x = 3.14     # 소수점 숫자도 가능

Python은 변수의 타입을 고정하지 않습니다. 같은 변수에 다른 타입의 값을 넣어도 문제없이 동작합니다.

여러 변수를 한 번에 만들기

# 각각 다른 값 할당
a, b, c = 1, 2, 3

# 같은 값을 여러 변수에
x = y = z = 0

변수 이름 규칙

# 허용
user_name = "alice"
count2 = 10
MAX_RETRY = 3

# 금지 (에러 발생)
2count = 10        # 숫자로 시작하면 안 됨
my-var = "hello"   # 하이픈(-) 사용 불가
class = "A"        # 예약어(Python이 이미 쓰는 단어) 사용 불가
규칙 설명
시작 문자 영문자 또는 언더스코어(_)
구성 문자 영문자, 숫자, 언더스코어
대소문자 구분 Namename은 다른 변수
관례 변수/함수는 snake_case, 상수는 UPPER_CASE

변수 할당의 동작 방식 (한 단계 더)

Python의 변수를 좀 더 정확하게 이해하면, 변수는 "값을 담는 상자"가 아니라 "값(객체)에 붙이는 이름표"입니다.

a = [1, 2, 3]
b = a          # b는 같은 리스트를 가리킴 (복사가 아님!)

b.append(4)
print(a)       # [1, 2, 3, 4] — a도 변경됨

b = a는 리스트를 복사하는 게 아니라, 같은 리스트에 이름을 하나 더 붙이는 것입니다. 이 점은 리스트나 딕셔너리 같은 타입을 다룰 때 중요해집니다.


2. 데이터 타입 개요

Python에서 다루는 모든 값에는 "타입"이 있습니다. 숫자인지, 문자인지, 참/거짓인지에 따라 할 수 있는 연산이 달라집니다.

타입 설명 언제 쓰는가 예시
int 정수 개수, 나이, 순서 등 42, -7, 0
float 소수점 숫자 가격, 비율, 측정값 등 3.14, -0.5
str 문자열 이름, 메시지, 텍스트 데이터 "hello", 'Python'
bool 참/거짓 조건 판단, 플래그 True, False
None 값 없음 아직 정해지지 않은 상태 None

타입 확인하기

x = 42
print(type(x))   # <class 'int'>

y = "hello"
print(type(y))   # <class 'str'>

type()에 변수를 넣으면 그 변수의 현재 타입을 알려줍니다.


3. int — 정수

정수는 소수점이 없는 숫자입니다. 개수를 세거나, 인덱스를 지정하거나, 반복 횟수를 정할 때 사용합니다.

기본 사용

age = 25
temperature = -10
count = 0

크기 제한 없음

Python의 정수는 아무리 큰 숫자도 담을 수 있습니다. 다른 언어처럼 "32비트 초과하면 오류" 같은 제한이 없습니다.

big = 10 ** 100  # 1 뒤에 0이 100개 — 문제없이 계산됨

큰 수 가독성

population = 8_100_000_000  # 언더스코어로 자릿수 구분 (값에 영향 없음)
budget = 1_000_000          # 백만

주요 연산

print(7 + 3)    # 10  — 더하기
print(7 - 3)    # 4   — 빼기
print(7 * 3)    # 21  — 곱하기
print(7 / 2)    # 3.5 — 나누기 (결과가 항상 소수점 숫자)
print(7 // 2)   # 3   — 몫만 구하기 (소수점 버림)
print(7 % 2)    # 1   — 나머지
print(2 ** 10)  # 1024 — 거듭제곱

주의할 점: /는 정수끼리 나눠도 결과가 float입니다. 정수 결과가 필요하면 //를 사용합니다.

진법 표현

프로그래밍에서 가끔 2진수나 16진수를 쓸 때가 있습니다.

decimal = 255        # 10진수
binary = 0b11111111  # 2진수 (0b로 시작)
hexa = 0xFF          # 16진수 (0x로 시작)

print(decimal == binary == hexa)  # True — 모두 같은 값

4. float — 소수점 숫자

소수점이 있는 숫자입니다. 가격, 비율, 측정값처럼 정밀한 수를 표현할 때 사용합니다.

기본 사용

price = 19.99
rate = 0.05
temperature = -12.5

과학적 표기법

매우 크거나 작은 수는 e 표기법을 사용합니다.

speed_of_light = 3e8     # 3 × 10⁸ = 300,000,000
electron_charge = 1.6e-19  # 1.6 × 10⁻¹⁹

소수점 계산의 주의점

컴퓨터는 소수를 이진수(0과 1)로 저장하기 때문에, 미세한 오차가 발생할 수 있습니다.

print(0.1 + 0.2)         # 0.30000000000000004
print(0.1 + 0.2 == 0.3)  # False — 예상과 다른 결과!

이건 Python 버그가 아니라, 모든 프로그래밍 언어에서 발생하는 구조적 한계입니다. 대부분의 경우 문제가 되지 않지만, 정확한 비교가 필요하면 math.isclose()를 사용합니다.

import math
print(math.isclose(0.1 + 0.2, 0.3))  # True

돈 계산처럼 정확해야 할 때

금융 계산에서는 decimal 모듈을 사용합니다.

from decimal import Decimal

price = Decimal("19.99")
tax = Decimal("0.1")
total = price * (1 + tax)
print(total)  # 21.989 — 정확한 계산

5. str — 문자열

문자열은 텍스트 데이터입니다. 이름, 메시지, 파일 경로, URL 등 프로그래밍에서 가장 자주 다루는 타입 중 하나입니다.

기본 사용

name = "Alice"
greeting = 'Hello, World!'
multiline = """여러 줄에 걸친
문자열도
이렇게 작성합니다."""

작은따옴표(')와 큰따옴표(") 중 아무거나 사용해도 됩니다. 기능 차이는 없습니다.

문자열은 수정할 수 없다

한번 만든 문자열은 일부만 바꿀 수 없습니다. 바꾸고 싶으면 새 문자열을 만들어야 합니다.

s = "hello"
# s[0] = "H"  # 에러! 문자열은 수정 불가

s = "H" + s[1:]  # 새 문자열 "Hello"를 만들어서 s에 할당
print(s)  # "Hello"

f-string — 변수를 문자열 안에 넣기

문자열 안에 변수 값을 넣고 싶을 때 f-string을 사용합니다. 문자열 앞에 f를 붙이고, 중괄호({}) 안에 변수를 넣으면 됩니다.

name = "Alice"
age = 30
print(f"{name}은 {age}살입니다.")  # Alice은 30살입니다.
print(f"내년에는 {age + 1}살")     # 내년에는 31살
print(f"가격: {9900:.2f}원")       # 가격: 9900.00원

자주 쓰는 메서드

text = "  Hello, Python!  "

text.strip()          # "Hello, Python!" — 양쪽 공백 제거
text.lower()          # "  hello, python!  "
text.upper()          # "  HELLO, PYTHON!  "
text.replace("Python", "World")  # "  Hello, World!  "
text.split(",")       # ['  Hello', ' Python!  ']
"_".join(["a", "b", "c"])  # "a_b_c"

문자열 길이와 인덱싱

msg = "Python"
print(len(msg))   # 6 — 글자 수
print(msg[0])     # "P" — 첫 번째 글자 (0부터 시작)
print(msg[-1])    # "n" — 마지막 글자
print(msg[0:3])   # "Pyt" — 0번째~2번째 (3번째 미포함)

6. bool — 참과 거짓

boolTrue(참)와 False(거짓) 두 가지 값만 가집니다. 조건문에서 "이 조건이 맞는가?"를 판단할 때 핵심적으로 사용됩니다.

기본 사용

is_active = True
has_error = False

주의: TrueFalse는 첫 글자가 대문자입니다. truefalse로 쓰면 에러가 납니다.

비교 연산의 결과는 bool

print(10 > 5)       # True
print(10 == 5)      # False
print("a" != "b")   # True
print(3 >= 3)       # True

Truthy와 Falsy — "참처럼/거짓처럼 취급되는 값"

Python에서는 True/False 외에도 모든 값이 참 또는 거짓으로 평가됩니다. if 문에 넣었을 때 "거짓처럼 취급되는 값(Falsy)"을 알아두면 됩니다.

거짓으로 취급되는 값 (Falsy):

의미
False 그 자체로 거짓
0, 0.0 숫자 0
"" 빈 문자열
[], (), {} 빈 리스트, 빈 튜플, 빈 딕셔너리
None 값 없음

위에 해당하지 않는 나머지는 모두 참(Truthy)입니다.

# 실무에서 자주 쓰는 패턴
items = []
if not items:
    print("리스트가 비어 있습니다.")

name = ""
if name:
    print(f"이름: {name}")
else:
    print("이름이 입력되지 않았습니다.")

if items:는 "리스트에 뭔가 있으면"이라는 뜻입니다. if len(items) > 0:보다 간결하고 Python다운 표현입니다.


7. None — "아직 값이 없다"

None은 "이 변수에는 아직 값이 정해지지 않았다"를 나타내는 특별한 값입니다. 다른 언어의 null이나 nil과 비슷한 역할입니다.

기본 사용

result = None  # 아직 결과를 모르는 상태

None 확인은 is를 사용

x = None

# 올바른 방법
if x is None:
    print("값이 없습니다.")

# 피해야 할 방법 (동작은 하지만 권장하지 않음)
if x == None:
    print("값이 없습니다.")

is None은 "정확히 None인가?"를 확인합니다. == None보다 안전하고 빠릅니다.

언제 None을 쓰는가

# 1. 함수가 결과를 찾지 못했을 때
def find_user(user_id):
    users = {"1": "Alice", "2": "Bob"}
    return users.get(user_id)  # 없으면 None 반환

result = find_user("99")
if result is None:
    print("사용자를 찾을 수 없습니다.")

# 2. "아직 설정 안 됨" 상태를 표현할 때
selected_color = None  # 사용자가 아직 색상을 선택하지 않음

# 3. 함수의 선택적 매개변수
def greet(name, title=None):
    if title is None:
        print(f"안녕하세요, {name}님!")
    else:
        print(f"안녕하세요, {title} {name}님!")

greet("철수")           # 안녕하세요, 철수님!
greet("철수", "교수")   # 안녕하세요, 교수 철수님!

8. 형 변환 — 타입 바꾸기

서로 다른 타입 사이를 변환할 때 int(), float(), str() 등을 사용합니다.

기본 변환

# 문자열 → 숫자
age = int("25")         # 25
price = float("19.99")  # 19.99

# 숫자 → 문자열
count_str = str(42)     # "42"
pi_str = str(3.14)      # "3.14"

# 정수 ↔ 소수점
n = int(3.7)    # 3 — 소수점 아래를 버림 (반올림 아님!)
f = float(10)   # 10.0

변환이 안 되는 경우

숫자가 아닌 문자열을 숫자로 바꾸려 하면 에러가 발생합니다.

# 에러 발생!
number = int("hello")  # ValueError

# 안전하게 처리하는 방법
try:
    number = int("hello")
except ValueError:
    print("숫자로 변환할 수 없습니다.")
    number = 0

문자열과 숫자는 자동으로 합쳐지지 않는다

# 에러!
# result = "나이: " + 25  # TypeError

# 올바른 방법 1: str()로 변환
result = "나이: " + str(25)

# 올바른 방법 2: f-string 사용 (더 간편)
result = f"나이: {25}"

9. 초보자가 자주 하는 실수

실수 1: 소수점 비교에 == 사용

# 예상과 다르게 동작
if 0.1 + 0.2 == 0.3:  # False!
    print("같다")

# 해결: math.isclose() 사용
import math
if math.isclose(0.1 + 0.2, 0.3):  # True
    print("같다")

실수 2: 변수 이름으로 내장 함수 이름을 사용

# 이러면 list()를 더 이상 쓸 수 없음!
list = [1, 2, 3]
str = "hello"
type = "admin"

# 해결: 의미 있는 이름 사용
user_list = [1, 2, 3]
user_name = "hello"
user_type = "admin"

실수 3: 나누기 결과가 소수점으로 나옴

page_count = 10 / 3   # 3.333... — 정수가 아님!

# 정수 결과가 필요하면 // 사용
page_count = 10 // 3  # 3

실수 4: 문자열과 숫자를 + 로 합치려고 함

age = 25
# "나이: " + age  # TypeError!

# 해결
"나이: " + str(age)   # 방법 1
f"나이: {age}"        # 방법 2 (더 권장)

10. 정리

타입 용도 예시 기억할 점
int 정수 (개수, 나이) 42, -7 크기 제한 없음, /// 구분
float 소수점 숫자 (가격, 비율) 3.14, 0.5 미세한 오차 가능, 돈 계산은 Decimal
str 텍스트 "hello" 수정 불가, f-string으로 변수 삽입
bool 조건 판단 True, False 빈 값들은 False로 취급
None 값 없음 None is None으로 확인

변수 핵심: 타입 선언 없이 =로 값을 할당하면 변수가 만들어지고, 언제든 다른 타입의 값을 넣을 수 있습니다.

다음 글에서는 Python의 리스트(list)를 다룹니다. 여러 값을 하나의 변수에 담고, 순서대로 꺼내 쓰는 방법을 정리합니다.


관련 글

반응형