파이썬(Python) 공부 2편
변수(Variable)와 자료형(Data Type) 완전 정리
파이썬을 배울 때 가장 먼저 마주치는 개념이 변수와 자료형입니다. 변수는 데이터를 담는 그릇이고, 자료형은 그 안에 담긴 데이터의 종류를 뜻합니다. 이 두 가지를 제대로 이해해야 이후에 배우는 조건문, 반복문, 함수 등 모든 개념의 토대가 됩니다.
📦 변수(Variable)란 무엇인가
변수는 데이터를 저장하는 이름이 붙은 공간입니다. 파이썬에서는 = 기호(대입 연산자)를 사용해 변수에 값을 할당합니다. 수학의 등호(같다)와 다르게, 파이썬의 =는 "오른쪽 값을 왼쪽 변수에 넣어라"는 뜻입니다.
# 변수 선언과 값 할당
name = "파이썬" # 문자열 할당
age = 10 # 정수 할당
version = 3.12 # 실수 할당
is_fun = True # 불리언 할당
# 변수 값 출력
print(name) # 파이썬
print(age) # 10
# 변수 값 변경 (언제든지 다른 값으로 바꿀 수 있다)
age = 32
print(age) # 32
# 여러 변수 한 줄에 할당
x, y, z = 1, 2, 3
print(x, y, z) # 1 2 3
# 같은 값 여러 변수에 동시 할당
a = b = c = 0
print(a, b, c) # 0 0 0
- 사용 가능: 영문자(a-z, A-Z), 숫자(0-9), 밑줄(_)
- 숫자로 시작 불가: 1name → 오류 / name1 → 가능
- 대소문자 구분: Name과 name은 서로 다른 변수
- 예약어(키워드) 사용 불가: if, for, while, class, True, False 등
- 파이썬 관례 (PEP 8): 변수·함수명은 소문자 + 밑줄 사용 → my_name, total_price
- 의미 있는 이름: x보다 user_age처럼 무엇을 담는지 알 수 있는 이름 권장
🔄 동적 타이핑(Dynamic Typing) — 파이썬의 핵심 특징
Java, C, C++ 같은 언어는 변수를 만들 때 자료형을 미리 선언해야 합니다. 반면 파이썬은 값을 넣는 순간 자동으로 자료형이 결정됩니다. 이를 동적 타이핑(Dynamic Typing)이라고 합니다.
# Java라면: int x = 10; 처럼 타입 명시 필요
# 파이썬은 타입 선언 없이 그냥 할당
x = 10 # 자동으로 int
x = "hello" # 이제 str로 바뀜 (파이썬에서는 가능)
x = 3.14 # 이제 float로 바뀜
# type() 함수로 현재 자료형 확인
a = 100
print(type(a)) # <class 'int'>
b = "파이썬"
print(type(b)) # <class 'str'>
c = True
print(type(c)) # <class 'bool'>
📋 파이썬 기본 자료형 4가지
소수점 없는 양의 정수, 음의 정수, 0을 담습니다.
예시: 0, 1, -5, 100, -999
파이썬의 int는 크기 제한이 없어 매우 큰 수도 표현 가능합니다.
소수점이 있는 숫자를 담습니다.
예시: 3.14, -0.5, 1.0, 2.718
컴퓨터 내부의 부동소수점 표현 방식으로 저장됩니다.
텍스트 데이터를 담습니다.
예시: "Hello", '파이썬', "123"
작은따옴표(' ') 또는 큰따옴표(" ") 모두 사용 가능합니다.
참(True) 또는 거짓(False) 두 가지 값만 가집니다.
예시: True, False
조건문·비교 연산의 결과로 자주 등장합니다.
1 int — 정수형 완전 정복
# 정수 선언
a = 10
b = -3
c = 0
# 기본 사칙연산
print(a + b) # 7 (덧셈)
print(a - b) # 13 (뺄셈)
print(a * b) # -30 (곱셈)
print(a / b) # -3.333... (나눗셈, 결과는 float)
print(a // b) # -4 (정수 나눗셈, 몫)
print(a % b) # -2 (나머지, 모듈로)
print(a ** 2) # 100 (거듭제곱)
# 2진수, 8진수, 16진수 표현
print(0b1010) # 10 (2진수)
print(0o12) # 10 (8진수)
print(0x0A) # 10 (16진수)
파이썬 3에서 / 연산자는 정수끼리 나눠도 항상 float을 반환합니다.
- 10 / 2 → 5.0 (float) ← 파이썬 3
- 10 // 2 → 5 (int) ← 정수 결과가 필요하면 // 사용
F float — 실수형과 부동소수점 주의사항
pi = 3.14159
temp = -0.5
big = 1.5e10 # 1.5 × 10^10 = 15000000000.0 (지수 표기)
print(pi + 1) # 4.14159
print(type(pi)) # <class 'float'>
# ⚠️ 부동소수점 오차 — 파이썬만의 문제가 아닌 컴퓨터 공통 현상
print(0.1 + 0.2) # 0.30000000000000004 ← 미세한 오차 발생
# 정밀한 소수 계산이 필요하면 round() 또는 decimal 모듈 활용
print(round(0.1 + 0.2, 2)) # 0.3
S str — 문자열 기초 (심화는 3편에서)
# 작은따옴표, 큰따옴표 모두 가능
s1 = 'Hello'
s2 = "World"
s3 = """여러 줄
문자열 가능"""
# 문자열 연결 (+) 과 반복 (*)
print(s1 + " " + s2) # Hello World
print("Ha" * 3) # HaHaHa
# f-string (파이썬 3.6+ 권장 방식) — 변수를 문자열 안에 넣기
name = "파이썬"
ver = 3.12
print(f"안녕하세요, {name} {ver}입니다!")
# 안녕하세요, 파이썬 3.12입니다!
# 문자열 길이
print(len("Hello")) # 5
# 숫자처럼 보여도 따옴표 안에 있으면 문자열
num_str = "123"
print(type(num_str)) # <class 'str'>
B bool — 불리언과 비교 연산자
# 불리언 값: True 또는 False (대문자 시작)
is_student = True
is_adult = False
# 비교 연산 결과는 bool
print(10 > 5) # True
print(10 == 5) # False (같다 비교는 == 두 개)
print(10 != 5) # True (다르다)
print(10 >= 10) # True (크거나 같다)
# 논리 연산자 (and, or, not)
print(True and False) # False (둘 다 True여야 True)
print(True or False) # True (하나만 True여도 True)
print(not True) # False (반전)
# bool은 int처럼 쓸 수 있음 (True=1, False=0)
print(True + 1) # 2
print(False + 10) # 10
🔎 type() 함수 — 자료형 확인하기
type()은 변수나 값의 자료형을 확인하는 내장 함수입니다. 파이썬 공부 초반에 자주 활용하면 자료형 감각을 빠르게 익힐 수 있습니다.
print(type(42)) # <class 'int'>
print(type(3.14)) # <class 'float'>
print(type("hello")) # <class 'str'>
print(type(True)) # <class 'bool'>
print(type(None)) # <class 'NoneType'>
# isinstance()로 특정 타입 여부 확인
x = 10
print(isinstance(x, int)) # True
print(isinstance(x, str)) # False
None은 파이썬의 특수한 값으로, "아무것도 없다"는 의미를 가집니다. 자료형은 NoneType이며, 다른 언어의 null과 유사합니다.
- 함수가 명시적으로 값을 반환하지 않을 때 자동으로 None 반환
- 변수를 초기화할 때 result = None 처럼 사용
- None 비교는 == 대신 is 사용 권장: if x is None:
🔁 형변환(Type Casting) — 자료형 바꾸기
한 자료형을 다른 자료형으로 변환하는 것을 형변환(Type Casting)이라고 합니다. 파이썬에서는 int(), float(), str(), bool() 함수를 사용합니다.
| 함수 | 변환 대상 | 예시 코드 | 결과 |
|---|---|---|---|
| int() | float, str → int | int("42") | 42 |
| int() | float → int (소수점 버림) | int(3.9) | 3 |
| float() | int, str → float | float("3.14") | 3.14 |
| str() | int, float → str | str(100) | "100" |
| bool() | int, str → bool | bool(0) | False |
| bool() | 0이 아닌 값 → True | bool(42) | True |
# str → int 변환 (입력값 처리에 자주 사용)
user_input = "25" # 문자열 "25"
age = int(user_input) # 정수 25로 변환
print(age + 1) # 26
# int → str 변환 (숫자를 문자열에 연결할 때)
score = 95
print("점수: " + str(score)) # 점수: 95
# 또는 f-string 사용 (더 권장)
print(f"점수: {score}") # 점수: 95
# bool() — 거짓(False)이 되는 값들
print(bool(0)) # False
print(bool("")) # False (빈 문자열)
print(bool(None)) # False
print(bool(1)) # True
print(bool("hi")) # True
# ⚠️ 잘못된 형변환은 오류 발생
# int("hello") → ValueError!
# int("3.14") → ValueError! (float 형식의 str은 int()로 직접 변환 불가)
# int(float("3.14")) → 3 (이렇게 해야 함)
파이썬에서 문자열과 숫자는 + 연산자로 직접 연결할 수 없습니다.
age = 25
# ❌ 오류 발생
# print("나이: " + age) → TypeError!
# ✅ 해결 방법 1: str()로 변환
print("나이: " + str(age)) # 나이: 25
# ✅ 해결 방법 2: f-string 사용 (권장)
print(f"나이: {age}") # 나이: 25
📝 2편 실습 문제 — 직접 풀어보기
아래 조건에 맞는 변수를 만들고 f-string으로 출력해보세요.
- 이름(name), 나이(age), 키(height), 파이썬 공부 중 여부(is_studying) 변수 만들기
- type()으로 각 변수의 자료형 출력
- f-string으로 "저는 [이름]이고 [나이]살입니다. 키는 [키]cm입니다." 출력
- num_str = "100" → int로 변환 후 50을 더해서 출력
- price = 1500 → str로 변환 후 "가격: " 앞에 붙여서 출력
- score = 0 → bool로 변환하면 True인지 False인지 확인
# 실습 1
name = "홍길동"
age = 28
height = 175.5
is_studying = True
print(type(name), type(age), type(height), type(is_studying))
print(f"저는 {name}이고 {age}살입니다. 키는 {height}cm입니다.")
# 실습 2
num_str = "100"
print(int(num_str) + 50) # 150
price = 1500
print("가격: " + str(price)) # 가격: 1500
score = 0
print(bool(score)) # False
- 변수: 데이터를 저장하는 이름 공간 / =으로 값 할당 / 언제든 변경 가능
- 변수 이름 규칙: 영문·숫자·밑줄 / 숫자 시작 불가 / 대소문자 구분 / 예약어 불가 / 소문자_밑줄 관례
- 동적 타이핑: 값을 넣는 순간 자료형 자동 결정 — 선언 없이 바로 사용
- int: 정수 / + - * / // % ** 연산 / /는 항상 float 반환
- float: 실수 / 부동소수점 오차 주의 / round()로 보완
- str: 문자열 / 따옴표 안에 텍스트 / f"...{변수}..." f-string 권장
- bool: True / False / 비교·논리 연산 결과 / 0·빈값·None → False
- type(): 자료형 확인 / isinstance()로 특정 타입 여부 확인
- 형변환: int() · float() · str() · bool() / 문자열+숫자 직접 연결 불가 → TypeError
인덱싱·슬라이싱 / 문자열 메서드 / f-string 심화 / 이스케이프 문자