Posted on Jul 20, 2025· Updated on Jul 20, 2025

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

#python #beginner #data types
Image for 파이썬 데이터 타입 완벽 해설 - 초보자를 위한 시각적 가이드

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 에서 허수 단위를 나타냅니다
타입일반적인 리터럴주요 특징사용 시점유용한 메서드/연산자
int42, 0xFF메모리가 허용하는 한 매우 커질 수 있는 정수; 이진 0b, 팔진 0o, 십육진 0x 리터럴 지원개수 세기, 인덱싱, 전체 수량 저장bit_length(), to_bytes()
float3.14, 1.2e3소수점이 있는 숫자; 계산 시 작은 반올림 오차가 발생할 수 있음측정, 평균, 과학적 계산.is_integer(), .hex(), math 모듈
complex2+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 과 비교할 때는 항상 isis 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아니요

초보자를 위한 핵심 요약

  1. 단순하게 시작: 정수에는 int, 소수점에는 float, 텍스트에는 str, 참/거짓에는 bool, "값이 없음"에는 None을 사용하세요.

  2. 컬렉션 쉽게: 변경해야 할 때는 list를, 변경하지 않을 때는 tuple을, 키 - 값 쌍에는 dict를, 고유 항목에는 set을 사용하세요.

  3. 망설여진다면: 초보자의 대부분의 컬렉션 요구 사항은 listdict로 해결됩니다.

  4. 간단한 예제로 연습한 후에 복잡한 사용 사례로 넘어가세요.

  5. 기억하세요: Python 은 관대합니다. 필요할 때 호환되는 타입 간에 변환할 수 있습니다.