[파이썬] 변수와 데이터 타입
- Developer/Python
- 2025. 3. 12.
파이썬 변수와 데이터 타입
파이썬 변수랑 데이터 타입이 헷갈리나요? 같이 한번 정리해봅시다.
안녕하세요, 여러분! 오늘은 저도 처음 파이썬 배울 때 고민했던 주제인 '변수와 데이터 타입'에 대해 이야기해 볼게요.
사실 저도 프로그래밍 처음 시작했을 때 변수가 뭔지, 데이터 타입이 왜 중요한지 이해하는 데 꽤 시간이 걸렸어요.
그래서 이번 포스팅에서는 제가 초보자였을 때 알았으면 좋았을 내용들을 최대한 쉽고 재미있게 풀어보려고 합니다. 코딩 입문자분들이 개념을 확실히 잡으실 수 있도록 도와드릴게요!
목차
1. 파이썬 변수의 기본 개념
변수라는 개념이 처음에는 좀 추상적으로 느껴질 수 있어요. 근데 생각해보면 우리 일상에서도 비슷한 개념을 쓰고 있어요. 예를 들어 집에 있는 서랍이나 상자를 떠올려 보세요. 그 안에 물건을 넣고 필요할 때 꺼내 쓰죠? 파이썬의 변수도 비슷한 개념이에요.
변수는 데이터를 저장하는 "메모리 공간"이라고 생각하시면 됩니다. 그리고 그 공간에 이름을 붙여주는 거예요. 파이썬에서는 =
기호(할당 연산자)를 사용해서 변수에 값을 저장합니다.
# 기본적인 변수 선언과 값 할당
age = 25 # 정수 변수
name = "파이썬 러버" # 문자열 변수
is_beginner = True # 불리언(참/거짓) 변수
파이썬의 멋진 점은 다른 언어들과 달리 변수 선언 시 데이터 타입을 명시적으로 지정할 필요가 없다는 거예요. 파이썬이 알아서 우리가 넣은 값을 보고 타입을 결정해요. 이런 특성을 "동적 타이핑"이라고 해요.
파이썬에서는 변수를 선언만 하고 값을 할당하지 않는 건 불가능해요. 반드시 값을 할당해야 변수가 생성됩니다.
2. 변수 이름 짓기: 규칙과 관례
변수 이름 짓기는 프로그래밍에서 생각보다 중요한 부분이에요. 이름만 봐도 변수의 용도를 알 수 있으면 코드가 훨씬 읽기 쉬워지거든요. 근데 파이썬에서는 변수 이름 짓는 데 몇 가지 규칙이 있어요. 아무렇게나 지을 수는 없답니다!
먼저 파이썬 변수 이름 짓기의 필수 규칙들을 살펴보겠습니다.
규칙 | 설명 | 예시 |
---|---|---|
문자, 숫자, 언더스코어(_) 사용 | 변수 이름에는 이 세 가지만 포함 가능 | user_name, temp1, _hidden |
숫자로 시작 불가 | 변수 이름의 첫 글자는 숫자가 될 수 없음 | ❌ 1data, ⭕ data1 |
대소문자 구분 | Name과 name은 다른 변수로 인식 | age ≠ Age ≠ AGE |
예약어 사용 불가 | 파이썬 내장 키워드는 변수명으로 사용 불가 | ❌ if, for, while, class |
공백 사용 불가 | 변수명에 공백을 포함할 수 없음 | ❌ user name, ⭕ user_name |
그리고 규칙은 아니지만 많은 파이썬 개발자들이 따르는 관례도 있어요. 이런 관례를 따르면 다른 사람들이 여러분의 코드를 더 쉽게 이해할 수 있죠.
- 소문자와 언더스코어로 변수명 작성 (snake_case): user_age, first_name
- 상수는 모두 대문자와 언더스코어로 표기: MAX_VALUE, PI, TAX_RATE
- 의미 있는 이름 사용: ⭕ user_age (좋음) vs ❌ a (나쁨)
- 언더스코어로 시작하는 변수는 내부 사용 변수 의미: _internal_use
3. 숫자 데이터 타입: int, float, complex
파이썬에서 숫자를 다루는 방법은 정말 간단해요. 기본적으로 세 가지 숫자 데이터 타입이 있어요: 정수(int), 실수(float), 복소수(complex). 대부분의 경우 우리는 정수와 실수만 주로 사용하게 되죠.
각 숫자 타입마다 특징이 있고, 각각 어떤 상황에서 써야 하는지 알면 더 효율적인 코드를 작성할 수 있어요.
- 정수(Integer, int)정수는 소수점이 없는 숫자예요. 자연수, 0, 음수 모두 포함됩니다. 파이썬 3에서는 정수의 크기 제한이 없어요! 메모리가 허용하는 한 아주 큰 수도 저장할 수 있죠.
age = 25 temperature = -10 binary = 0b1010 # 2진수 (10) octal = 0o17 # 8진수 (15) hexa = 0xA # 16진수 (10) print(type(age)) # <class 'int'>
- 실수(Floating Point, float)실수는 소수점이 있는 숫자예요. 과학적 표기법(1.23e4 = 12300)으로도 표현할 수 있습니다.한 가지 주의할 점은 실수 연산에서는 약간의 오차가 발생할 수 있어요. 컴퓨터가 이진수로 실수를 표현하는 방식 때문이에요.
pi = 3.14159 height = 175.5 science = 1.23e-4 # 0.000123 print(type(pi)) # <class 'float'>
- 복소수(Complex Number, complex)복소수는 실수부와 허수부(j)로 구성되어 있습니다. 수학, 물리학, 전기공학 등에서 주로 사용돼요.
complex_num = 3 + 4j print(type(complex_num)) # <class 'complex'> print(complex_num.real) # 3.0 (실수부) print(complex_num.imag) # 4.0 (허수부)
파이썬에서는 type() 함수를 사용해 변수의 데이터 타입을 확인할 수 있어요. 위 예시 코드에서 본 것처럼 간단하게 확인할 수 있죠.
실수 연산 시 정확한 값을 원한다면 decimal 모듈을 사용하는 것이 좋습니다. 일반 float는 이진 부동소수점 표현 방식 때문에 0.1 + 0.2가 정확히 0.3이 아닐 수 있어요!
문자열의 각 문자는 인덱스(위치)를 통해 접근할 수 있어요. 파이썬에서 인덱스는 0부터 시작합니다. 슬라이싱을 통해 문자열의 일부분을 추출할 수도 있죠.
text = "Python"
first_char = text[0] # 'P'
last_char = text[-1] # 'n'
# 슬라이싱: [시작:끝:단계]
substring = text[1:4] # 'yth' (인덱스 1부터 3까지)
reversed_text = text[::-1] # 'nohtyP' (문자열 뒤집기)
문자열 메서드
파이썬은 문자열을 다루기 위한 정말 다양한 메서드를 제공해요. 아래는 자주 사용하는 몇 가지 메서드들이에요.
text = " Python Programming "
# 대소문자 변환
print(text.upper()) # ' PYTHON PROGRAMMING '
print(text.lower()) # ' python programming '
# 공백 제거
print(text.strip()) # 'Python Programming'
# 문자열 바꾸기
print(text.replace('P', 'J')) # ' Jython Jrogramming '
# 문자열 분할
words = "apple,banana,orange".split(',') # ['apple', 'banana', 'orange']
# 문자열 결합
joined = '-'.join(['apple', 'banana', 'orange']) # 'apple-banana-orange'
# 검색
print("Python" in text) # True
print(text.find("gram")) # 13 (위치 반환)
print(text.count("P")) # 2 (개수 반환)
아, 그리고 문자열은 불변(immutable)이라는 특성이 있어요. 한번 생성된 문자열은 변경할 수 없고, 변경이 필요하면 새로운 문자열을 만들어야 해요. 이건 파이썬의 주요 특성이니 꼭 기억하세요!
5. 리스트(List) 기초와 활용
리스트는 파이썬에서 가장 많이 사용되는 데이터 타입 중 하나에요. 여러 항목을 순서대로 저장하는 컬렉션이죠. 대괄호 []를 사용해서 만들고, 서로 다른 데이터 타입의 요소들을 함께 저장할 수 있어요.
# 리스트 생성
fruits = ["사과", "바나나", "체리"]
mixed_list = [1, "Hello", 3.14, True] # 다양한 데이터 타입 포함 가능
empty_list = [] # 빈 리스트
number_list = list(range(1, 6)) # [1, 2, 3, 4, 5]
리스트는 정말 유용한 자료구조예요. 그래서 여러 개발자들이 다양한 방법으로 활용하고 있죠. 아래 표는 리스트의 주요 특성과 작업들을 보여줍니다.
작업 | 문법 | 설명 | 예시 |
---|---|---|---|
접근 | list[index] | 인덱스로 요소에 접근 | fruits[0] → "사과" |
슬라이싱 | list[start:end] | 부분 리스트 추출 | fruits[0:2] → ["사과", "바나나"] |
길이 | len(list) | 리스트 길이 반환 | len(fruits) → 3 |
추가 | list.append(item) | 끝에 항목 추가 | fruits.append("망고") |
삽입 | list.insert(index, item) | 특정 위치에 항목 삽입 | fruits.insert(1, "파인애플") |
제거 | list.remove(item) | 값으로 항목 제거 | fruits.remove("바나나") |
팝 | list.pop(index) | 인덱스 위치 항목 제거 후 반환 | fruits.pop() → 마지막 항목 제거 |
정렬 | list.sort() | 리스트 정렬 | fruits.sort() → 알파벳 순서로 정렬 |
리스트는 가변(mutable) 데이터 타입이에요. 즉, 한번 생성된 리스트의 내용을 변경할 수 있죠. 이는 문자열과의 큰 차이점이에요.
리스트 컴프리헨션
파이썬의 강력한 기능 중 하나인 '리스트 컴프리헨션'을 소개할게요. 이 기능을 사용하면 간결하게 리스트를 생성할 수 있어요.
# 일반적인 방법
squares = []
for i in range(1, 6):
squares.append(i ** 2)
print(squares) # [1, 4, 9, 16, 25]
# 리스트 컴프리헨션 사용
squares = [i ** 2 for i in range(1, 6)]
print(squares) # [1, 4, 9, 16, 25]
# 조건문 포함
even_squares = [i ** 2 for i in range(1, 11) if i % 2 == 0]
print(even_squares) # [4, 16, 36, 64, 100]
6. 데이터 타입 변환하기
파이썬에서는 데이터 타입을 다른 타입으로 변환하는 것이 매우 쉬워요. 이를 '타입 캐스팅(Type Casting)'이라고 하죠. 개발하다 보면 자주 필요한 기능이랍니다. 특히 사용자 입력을 받을 때 많이 사용해요.
파이썬의 주요 타입 변환 함수들은 다음과 같아요:
-
int()
: 정수로 변환 -
float()
: 실수로 변환 -
str()
: 문자열로 변환 -
list()
: 리스트로 변환 -
tuple()
: 튜플로 변환 -
bool()
: 불리언으로 변환
다음은 데이터 타입 변환의 실제 예시들이에요:
# 숫자형 변환
num_str = "123"
num_int = int(num_str) # 123 (문자열 → 정수)
num_float = float(num_str) # 123.0 (문자열 → 실수)
# 문자열 변환
num = 456
str_num = str(num) # "456" (정수 → 문자열)
# 리스트 변환
text = "Python"
char_list = list(text) # ['P', 'y', 't', 'h', 'o', 'n']
# 불리언 변환
print(bool(0)) # False
print(bool(1)) # True
print(bool("")) # False (빈 문자열)
print(bool("Hello")) # True (비어있지 않은 문자열)
모든 변환이 항상 가능한 것은 아니에요. 예를 들어, 'abc'와 같은 문자열은 int()로 변환할 수 없습니다. 변환할 수 없는 경우 ValueError 예외가 발생해요.
타입 확인하기
변수의 현재 데이터 타입을 확인하기 위해서는 type()
함수를 사용하면 돼요.
x = 10
print(type(x)) # <class 'int'>
y = 10.5
print(type(y)) # <class 'float'>
name = "Python"
print(type(name)) # <class 'str'>
is_valid = True
print(type(is_valid)) # <class 'bool'>
my_list = [1, 2, 3]
print(type(my_list)) # <class 'list'>
특정 타입인지 확인하려면 isinstance()
함수를 사용할 수도 있습니다.
x = 10
print(isinstance(x, int)) # True
print(isinstance(x, float)) # False
print(isinstance(x, (int, float))) # True (여러 타입 중 하나인지 확인)
파이썬에서 데이터 타입을 자유자재로 다루는 능력은 효율적인 코드 작성에 매우 중요해요. 특히 다양한 입력을 처리해야 하는 프로그램을 만들 때 이런 변환 기술이 큰 도움이 됩니다.
데이터 타입 변환을 과도하게 사용하면 코드의 가독성이 떨어질 수 있어요. 필요한 경우에만 사용하고, 가능하면 동일한 타입으로 작업하는 것이 좋습니다.
자주 묻는 질문 (FAQ)
네, 파이썬에서는 변수를 선언만 하고 값을 할당하지 않는 것은 불가능합니다. 다른 언어처럼 변수 타입을 먼저 선언하고 나중에 값을 할당하는 방식이 아니라, 값을 할당하는 순간 변수가 생성되고 타입이 결정됩니다.
변수를 초기화하기 위해서는 단순히 값을 할당하면 됩니다. 값이 없는 변수가 필요하다면 None을 사용할 수 있습니다: my_var = None
파이썬 3에서 정수(int)는 사실상 크기 제한이 없습니다. 메모리가 허용하는 한 아주 큰 숫자도 저장할 수 있어요. 이전 버전인 파이썬 2에서는 int와 long이 분리되어 있었지만, 파이썬 3에서는 통합되었습니다.
아주 큰 숫자도 쉽게 다룰 수 있습니다: big_num = 10**100
(10의 100승, 구글(googol)이라 불리는 숫자)
문자열을 숫자로 변환할 때는 그 문자열이 실제로 숫자만 포함하고 있는지 확인해야 합니다. 그렇지 않으면 ValueError 예외가 발생합니다. 또한 사용자 입력을 받을 때는 항상 예외 처리를 해주는 것이 좋습니다.
try-except 블록을 사용하여 안전하게 변환할 수 있습니다:
try:
num = int("123") # 성공
num = int("abc") # 실패, ValueError 발생
except ValueError:
print("숫자로 변환할 수 없는 문자열입니다.")
가장 큰 차이점은 리스트는 가변(mutable)이고 문자열은 불변(immutable)이라는 점입니다. 리스트는 항목을 추가, 변경, 삭제할 수 있지만, 문자열은 한번 생성되면 내용을 변경할 수 없습니다. 문자열을 '변경'하면 실제로는 새로운 문자열이 생성됩니다.
리스트와 문자열의 차이를 보여주는 간단한 예시:
# 리스트 변경 (가능)
my_list = [1, 2, 3]
my_list[0] = 10 # 성공: [10, 2, 3]
# 문자열 변경 (불가능)
my_string = "abc"
# my_string[0] = "x" # 에러 발생! TypeError
new_string = "x" + my_string[1:] # 새 문자열 생성: "xbc"
파이썬의 동적 타이핑은 편리하지만, 대규모 프로젝트에서는 버그를 일으킬 수 있는 잠재적 원인이 될 수 있습니다. 예를 들어, 함수가 특정 타입의 인자를 기대하는데 다른 타입이 전달되면 런타임 에러가 발생할 수 있어요. 이런 문제를 해결하기 위해 파이썬 3.5부터는 타입 힌트(Type Hints)를 제공합니다.
타입 힌트를 사용하면 코드의 의도를 명확히 하고 버그를 줄일 수 있습니다:
def greet(name: str) -> str:
"""인사말을 반환하는 함수"""
return f"안녕하세요, {name}님!"
변수 이름을 정할 때 가장 중요한 원칙은 명확성과 의미성입니다. 변수 이름만 보고도 그 목적과 용도를 쉽게 이해할 수 있어야 합니다. 약어나 모호한 이름보다는 구체적이고 명확한 이름을 사용하세요. 또한 일관된 네이밍 스타일을 유지하는 것도 중요합니다.
좋은 변수명과 나쁜 변수명의 예시는,
# 나쁜 변수명
x = 10 # 무엇을 의미하는지 알 수 없음
tmp = "John" # 임시 변수처럼 보이지만 실제로는?
data = [1, 2, 3] # 너무 일반적인 이름
# 좋은 변수명
age = 10 # 명확히 나이를 나타냄
user_name = "John" # 사용자 이름임을 알 수 있음
score_list = [1, 2, 3] # 점수 목록임을 알 수 있음
마무리 및 다음 단계
자, 여러분! 오늘은 파이썬의 기본 중의 기본인 변수와 데이터 타입에 대해 함께 알아봤어요. 사실 처음에 프로그래밍을 시작할 때 이런 기본 개념들이 지루하게 느껴질 수도 있어요. 저도 처음엔 그랬으니까요. 그런데 이 기초가 탄탄해야 나중에 더 복잡한 개념을 배울 때 훨씬 수월하답니다.
그리고 뭔가요... 정말 신기한건 프로그래밍을 오래 하다보면 이런 기본 개념들이 가장 많이 쓰인다는 거예요. 복잡한 알고리즘을 짜는 것보다, 변수를 어떻게 잘 활용하고 타입을 어떻게 잘 다루느냐가 실제 코딩에서 훨씬 중요하거든요. 저도 지금도 매일 이런 기초적인 것들을 사용하고 있어요!
1. 변수는 데이터를 저장하는 메모리 공간에 이름을 붙인 것
2. 파이썬은 동적 타이핑 언어로, 값을 할당하면 자동으로 타입이 결정됨
3. 숫자 타입에는 정수(int), 실수(float), 복소수(complex)가 있음
4. 문자열(str)은 불변(immutable)이며 다양한 조작 메서드를 제공
5. 리스트(list)는 가변(mutable)이며 다양한 데이터 타입을 저장 가능
6. 타입 변환 함수를 사용해 데이터 타입 간 변환 가능
여러분이 이 글을 읽고 파이썬의 기본 데이터 타입에 대한 이해가 조금이라도 깊어졌으면 좋겠네요. 실제로 직접 코드를 작성하면서 연습해보는 것도 정말 중요해요. 이론만 알아서는 실력이 늘지 않거든요. 한번 이 글에서 배운 내용들을 가지고 간단한 프로그램을 작성해보는 건 어떨까요?
감사합니다.
'Developer > Python' 카테고리의 다른 글
[파이썬] 조건문(if-else)으로 만드는 나만의 퀴즈 프로그램 (0) | 2025.03.12 |
---|---|
[파이썬] 파이썬으로 만드는 계산기 프로젝트 (0) | 2025.03.12 |
[Python] 설치부터 Hello World 출력 (0) | 2025.03.11 |
<Python> 멀티 스레딩과 멀티 프로세싱 (0) | 2023.08.18 |
<Python> 소켓 통신 (0) | 2023.08.17 |