파이썬 데이터 타입 완벽 해설 - 초보자를 위한 시각적 가이드

Python 은 거의 모든 것을 다룰 수 있는 9 가지 핵심 데이터 타입을 제공합니다. 올바른 타입을 선택하면 코드가 더 명확해지고, 빨라지며, 안전해집니다. 이 가이드는 각 타입이 어떻게 작동하는지, 언제 사용해야 하는지, 그리고 주의할 점을 보여줍니다. 빠른 개요를 보려면 기초 가이드도 확인하세요.
Python 내장 데이터 타입 카테고리 및 변경 가능성 (mutability) 다이어그램.
1. 숫자 – int, float, complex
Python 에는 숫자를 다루기 위한 세 가지 타입이 있으며, 각각 다른 상황에 맞게 설계되었습니다.
기본 예제부터
# 정수 (Integers) - 전체 숫자
age = 25
score = 100
negative = -10
# 부동 소수점 (Floats) - 소수점이 있는 숫자
price = 19.99
temperature = 98.6
pi = 3.14159
# 복소수 (Complex) - 실수부와 허수부를 가진 숫자 (고급 수학)
z = 2 + 3j # j 는 Python 에서 허수 단위를 나타냅니다
| 타입 | 일반적인 리터럴 | 주요 특징 | 사용 시점 | 유용한 메서드/연산자 |
|---|---|---|---|---|
int | 42, 0xFF | 메모리가 허용하는 한 매우 커질 수 있는 정수; 이진 0b, 팔진 0o, 십육진 0x 리터럴 지원 | 개수 세기, 인덱싱, 전체 수량 저장 | bit_length(), to_bytes() |
float | 3.14, 1.2e3 | 소수점이 있는 숫자; 계산 시 작은 반올림 오차가 발생할 수 있음 | 측정, 평균, 과학적 계산 | .is_integer(), .hex(), math 모듈 |
complex | 2+3j, complex(a,b) | 실수부와 허수부를 가진 숫자 (고급 수학에 사용); .real, .imag, .conjugate() | 고급 수학, 공학, 신호 처리 | 모든 산술 연산, abs()는 크기 (magnitude) 반환 |
추가 예제
# 정수 작업
items = 5
total_items = items * 3 # 15
# 실수 작업
radius = 2.5
area = 3.14159 * radius * radius # 19.634...
# 실수 정밀도 주의
result = 0.1 + 0.2 # 0.30000000000000004 (정확히 0.3 이 아님!)
# 복소수 (초보자에게는 아마 필요 없을 것입니다)
z = complex(2, 3) # 2+3j 와 동일
magnitude = abs(z) # 3.605...
2. 문자열 – str
문자열은 텍스트를 담고 있으며, 사용하게 될 가장 중요한 타입 중 하나입니다. 더 자세한 문자열 작업은 문자열 조작 가이드를 참조하세요.
기본 예제
# 문자열 생성
name = "Alice"
message = 'Hello world'
long_text = """이것은
여러 줄 문자열입니다"""
# 기본 연산
greeting = "Hello, " + name # "Hello, Alice"
repeated = "Ha" * 3 # "HaHaHa"
length = len(message) # 11
주요 특징:
- 불변 (Immutable): 생성 후에는 변경할 수 없습니다 (하지만 새로 생성할 수는 있습니다)
- 작은따옴표
'또는 큰따옴표"사용 - 여러 줄 텍스트에는 삼중 따옴표
"""사용 - 유니코드 지원 (이모지, 국제 문자)
일반적인 문자열 연산
text = " Python Programming "
# 유용한 메서드
clean_text = text.strip() # "Python Programming"
words = clean_text.split() # ["Python", "Programming"]
joined = "-".join(words) # "Python-Programming"
upper_text = clean_text.upper() # "PYTHON PROGRAMMING"
replaced = clean_text.replace("Python", "Java") # "Java Programming"
# 내용 확인
starts_with_p = clean_text.startswith("Python") # True
has_gram = "gram" in clean_text # True
# 최신 포맷팅 (권장)
age = 25
formatted = f"I am {age} years old" # "I am 25 years old"
3. 불리언 – bool
불리언은 True 또는 False 값을 나타내며, 코드에서 결정을 내리는 데 필수적입니다. bool() 함수에 대해 자세히 알아보세요.
기본 예제
# 단순 불리언 값
is_student = True
is_graduated = False
# 불리언 연산
has_degree = is_student or is_graduated # True
ready_to_work = is_graduated and not is_student # False
참값 (Truthiness): Python 은 조건문에서 많은 값을 True 또는 False 로 취급합니다:
# 이것들은 "참값"(truthy, True 처럼 작동) 입니다
if "hello": # 비어 있지 않은 문자열
if [1, 2, 3]: # 비어 있지 않은 리스트
if 42: # 0 이 아닌 숫자
# 이것들은 "거짓값"(falsy, False 처럼 작동) 입니다
if "": # 빈 문자열
if []: # 빈 리스트
if 0: # 숫자 0
if None: # None 값
실용적인 예제
items = []
if items:
print("We have items!")
else:
print("No items found") # 이것이 출력됨
score = 85
passed = score >= 60 # True
4. None 타입 – NoneType
None은 “없음” 또는 "값이 없음"을 나타내며, Python 에서 어디서나 볼 수 있습니다.
기본 예제
# 아직 값이 없는 변수
result = None
user_input = None
# 함수는 기본적으로 None 을 반환합니다
def greet(name):
print(f"Hello, {name}")
return_value = greet("Alice") # return_value 는 None 입니다
# None 확인
if result is None:
print("No result yet")
# 일반적인 패턴: 선택적 값
def find_user(username):
# ... 검색 로직 ...
if user_found:
return user_data
else:
return None # 아무것도 찾지 못함
중요: None 과 비교할 때는 항상 is와 is not을 사용하고, ==를 사용하지 마세요:
# 올바른 방법
if value is None:
# 무언가를 수행
# 잘못된 방법 (하지만 작동함)
if value == None:
# 무언가를 수행
5. 리스트 – list
리스트는 여러 항목을 순서대로 저장하며 생성 후에도 변경할 수 있습니다. 포괄적인 리스트 작업은 리스트와 튜플 가이드를 참조하세요.
기본 예제
# 리스트 생성
fruits = ["apple", "banana", "orange"]
numbers = [1, 2, 3, 4, 5]
mixed = ["hello", 42, True, None] # 리스트는 다른 타입을 포함할 수 있음
empty = []
# 항목 접근 (인덱스는 0 부터 시작)
first_fruit = fruits[0] # "apple"
last_fruit = fruits[-1] # "orange"
일반적인 연산
shopping_list = ["milk", "bread"]
# 항목 추가
shopping_list.append("eggs") # ["milk", "bread", "eggs"]
shopping_list.insert(0, "butter") # ["butter", "milk", "bread", "eggs"]
shopping_list.extend(["cheese", "ham"]) # 여러 항목 추가
# 항목 제거
shopping_list.remove("milk") # 첫 번째 일치 항목 제거
last_item = shopping_list.pop() # 마지막 항목 제거 및 반환
first_item = shopping_list.pop(0) # 첫 번째 항목 제거 및 반환
# 유용한 연산
length = len(shopping_list)
has_bread = "bread" in shopping_list
리스트 사용 시점
- 변경될 수 있는 순서가 있는 데이터가 필요할 때
- 항목별로 컬렉션을 구축할 때
- 위치로 항목에 접근해야 할 때
# 좋은 사용 사례
grades = [85, 92, 78, 96]
todo_items = ["wash dishes", "walk dog", "study Python"]
# 리스트 처리
total = sum(grades)
average = total / len(grades)
for item in todo_items:
print(f"Task: {item}")
6. 딕셔너리 – dict
딕셔너리는 키 - 값 쌍으로 데이터를 저장하며, 실제 사전에서 단어 (키) 를 찾아 정의 (값) 를 찾는 것과 같습니다. 포괄적인 딕셔너리 작업은 딕셔너리 가이드를 참조하세요.
기본 예제
# 딕셔너리 생성
person = {"name": "Alice", "age": 30, "city": "New York"}
grades = {"math": 85, "english": 92, "science": 78}
empty = {}
# 값 접근
name = person["name"] # "Alice"
age = person.get("age") # 30 (더 안전한 방법)
height = person.get("height", "unknown") # 키가 없으면 "unknown"
일반적인 연산
student = {"name": "Bob", "grade": 85}
# 값 추가/업데이트
student["age"] = 20 # 새 키 - 값 쌍 추가
student["grade"] = 90 # 기존 값 업데이트
# 유용한 메서드
keys = student.keys() # dict_keys(['name', 'grade', 'age'])
values = student.values() # dict_values(['Bob', 90, 20])
items = student.items() # dict_items([('name', 'Bob'), ...])
# 키 확인
if "name" in student:
print(f"Student name: {student['name']}")
# 항목 제거
age = student.pop("age") # 값 제거 및 반환
student.pop("height", None) # 안전한 제거 (키가 없어도 오류 없음)
딕셔너리 사용 시점
- 고유 식별자로 값을 조회해야 할 때
- 구조화된 데이터 저장 (레코드 등)
- 항목 개수 세기
- 캐싱/메모이제이션
# 좋은 사용 사례
inventory = {"apples": 50, "bananas": 30, "oranges": 25}
user_profile = {
"username": "alice123",
"email": "alice@example.com",
"is_premium": True
}
# 개수 세기 예제
text = "hello world"
char_count = {}
for char in text:
char_count[char] = char_count.get(char, 0) + 1
# 결과: {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1}
7. 튜플 – tuple
튜플은 리스트와 비슷하지만 생성 후에는 변경할 수 없습니다. “잠긴” 리스트라고 생각하세요. 리스트와 튜플 가이드에서 튜플에 대해 자세히 알아보세요.
기본 예제
# 튜플 생성
coordinates = (10, 20)
rgb_color = (255, 0, 128)
single_item = (42,) # 단일 항목 튜플의 경우 쉼표에 유의하세요
empty = ()
# 소괄호는 종종 생략 가능
point = 5, 10 # (5, 10) 과 동일
name_age = "Alice", 25 # ("Alice", 25) 와 동일
# 항목 접근 (리스트와 동일)
x = coordinates[0] # 10
y = coordinates[1] # 20
튜플 언패킹 (Unpacking)
# 언패킹은 매우 유용합니다
point = (100, 200)
x, y = point # x=100, y=200
# 값 교환
a = 5
b = 10
a, b = b, a # 이제 a=10, b=5
# 여러 값 반환하는 함수
def get_name_age():
return "Bob", 25
name, age = get_name_age()
튜플 사용 시점
- 생성 후 변경되지 않을 고정된 컬렉션이 필요할 때
- 함수에서 여러 값을 반환할 때
- 딕셔너리 키로 사용될 때 (불변이므로)
- 좌표, RGB 값 등을 나타낼 때
# 좋은 사용 사례
WINDOW_SIZE = (800, 600) # 상수
DEFAULT_COLOR = (255, 255, 255) # RGB 흰색
# 튜플 키를 가진 딕셔너리
locations = {
(0, 0): "origin",
(1, 1): "northeast",
(-1, -1): "southwest"
}
8. 세트 – set
세트는 중복 없이 고유한 항목을 순서 없이 저장합니다. 멤버십 테스트 및 중복 제거에 탁월합니다. 포괄적인 세트 작업은 세트 가이드를 참조하세요.
기본 예제
# 세트 생성
colors = {"red", "green", "blue"}
numbers = {1, 2, 3, 4, 5}
empty = set() # 참고: {}는 빈 딕셔너리를 생성하며, 세트가 아님!
# 리스트에서 생성 (중복 제거)
mixed_list = [1, 2, 2, 3, 3, 3]
unique_numbers = set(mixed_list) # {1, 2, 3}
일반적인 연산
tags = {"python", "programming", "beginner"}
# 항목 추가
tags.add("tutorial")
tags.update(["coding", "learning"]) # 여러 항목 추가
# 항목 제거
tags.remove("beginner") # 항목이 없으면 오류 발생
tags.discard("advanced") # 항목이 없어도 오류 없음
# 멤버십 테스트 (매우 빠름!)
if "python" in tags:
print("This is about Python!")
# 세트 연산
set1 = {1, 2, 3}
set2 = {3, 4, 5}
union = set1 | set2 # {1, 2, 3, 4, 5}
intersection = set1 & set2 # {3}
difference = set1 - set2 # {1, 2}
세트 사용 시점
- 컬렉션에서 중복 제거
- 빠른 멤버십 테스트
- 수학적 세트 연산
- 고유 방문자, ID 등을 추적할 때
# 좋은 사용 사례
unique_visitors = set()
unique_visitors.add("user123")
unique_visitors.add("user456")
unique_visitors.add("user123") # 중복 추가 안 됨
print(len(unique_visitors)) # 2
# 리스트에서 중복 제거
items = ["apple", "banana", "apple", "orange", "banana"]
unique_items = list(set(items)) # ['apple', 'banana', 'orange']
올바른 타입 선택 – 실제 팁
| 시나리오 | 최적의 타입 | 이유 |
|---|---|---|
| 사용자 나이 저장 | int | 정수, 소수점 불필요 |
| 제품 가격 | float | 소수점 필요 |
| 사용자 로그인 상태 | bool | 단순한 참/거짓 값 |
| 사용자의 중간 이름 (없을 수 있음) | str 또는 None | 부재할 수 있음 |
| 장바구니 항목 | list | 순서가 있으며 항목 추가/제거 가능 |
| 사용자 프로필 데이터 | dict | 키 - 값 쌍 (이름, 이메일 등) |
| GPS 좌표 | tuple | 변경되지 않는 고정된 쌍 |
| 고유 제품 카테고리 | set | 중복 없음, 빠른 조회 |
변경 가능성 및 해시 가능성 치트 시트
| 타입 | 변경 가능? | 해시 가능? | 딕셔너리 키 가능? |
|---|---|---|---|
int, float, complex | 아니요 | 예 | ✔ |
str | 아니요 | 예 | ✔ |
bool | 아니요 | 예 | ✔ |
None | 아니요 | 예 | ✔ |
tuple (불변 항목 포함 시) | 아니요 | 예 | ✔ |
list | 예 | 아니요 | ✘ |
dict | 예 | 아니요 | ✘ |
set | 예 | 아니요 | ✘ |
초보자를 위한 핵심 요약
단순하게 시작: 정수에는
int, 소수점에는float, 텍스트에는str, 참/거짓에는bool, "값이 없음"에는None을 사용하세요.컬렉션 쉽게: 변경해야 할 때는
list를, 변경하지 않을 때는tuple을, 키 - 값 쌍에는dict를, 고유 항목에는set을 사용하세요.망설여진다면: 초보자의 대부분의 컬렉션 요구 사항은
list와dict로 해결됩니다.간단한 예제로 연습한 후에 복잡한 사용 사례로 넘어가세요.
기억하세요: Python 은 관대합니다. 필요할 때 호환되는 타입 간에 변환할 수 있습니다.