
Python 변수명
변수명은 프로그램의 가독성과 유지보수성에 큰 영향을 미친다. Python에서는 변수명을 지을 때 따라야 하는 문법적 규칙과 권장되는 명명 규칙이 있다. 좋은 변수명은 코드를 이해하기 쉽게 만들고 버그를 줄이는 데 도움이 된다.
변수명 규칙
Python에서 변수명을 만들 때 반드시 따라야 하는 문법적 규칙들이다.
필수 규칙
- 변수명은 문자(a-z, A-Z) 또는 언더스코어(_)로 시작해야 한다
- 변수명은 숫자로 시작할 수 없다
- 변수명에는 영문자, 숫자, 언더스코어만 사용할 수 있다
- 변수명은 대소문자를 구분한다
- 변수명에는 공백을 사용할 수 없다
- Python 예약어는 변수명으로 사용할 수 없다
올바른 변수명 예제
myvar = "John"
my_var = "John"
_my_var = "John"
myVar = "John"
MYVAR = "John"
myvar2 = "John"
잘못된 변수명 예제
2myvar = "John" # 숫자로 시작
my-var = "John" # 하이픈 사용
my var = "John" # 공백 사용
for = "John" # 예약어 사용
여러 단어로 구성된 변수명
변수명이 여러 단어로 구성될 때 가독성을 높이는 다양한 방법이 있다.
카멜 케이스 (Camel Case)
첫 번째 단어를 제외한 각 단어의 첫 글자를 대문자로 작성한다.
myVariableName = "John"
firstName = "John"
lastName = "Doe"
totalAmount = 1500
파스칼 케이스 (Pascal Case)
모든 단어의 첫 글자를 대문자로 작성한다.
MyVariableName = "John"
FirstName = "John"
LastName = "Doe"
TotalAmount = 1500
스네이크 케이스 (Snake Case)
단어 사이를 언더스코어로 연결하고 모든 글자를 소문자로 작성한다. Python에서 권장하는 방식이다.
my_variable_name = "John"
first_name = "John"
last_name = "Doe"
total_amount = 1500
💡 Python 네이밍 컨벤션:
• PEP 8에 따르면 변수명은 스네이크 케이스를 사용한다
• 함수명도 스네이크 케이스를 사용한다
• 클래스명은 파스칼 케이스를 사용한다
• 상수는 모든 글자를 대문자로 하고 언더스코어로 연결한다
대소문자 구분
Python은 대소문자를 엄격하게 구분하므로 같은 철자라도 대소문자가 다르면 완전히 다른 변수로 인식한다.
a = 4
A = "Sally"
print(a) # 4 출력
print(A) # Sally 출력
대소문자 구분 예제
name = "홍길동"
Name = "김철수"
NAME = "이영희"
print(f"name: {name}")
print(f"Name: {Name}")
print(f"NAME: {NAME}")위 예제에서 name, Name, NAME은 모두 다른 변수다.
Python 예약어
Python에서 이미 특별한 의미로 사용되는 단어들은 변수명으로 사용할 수 없다.
Python 예약어 목록
예약어 | 용도 |
---|---|
and, or, not | 논리 연산자 |
if, elif, else | 조건문 |
for, while, break, continue | 반복문 |
def, return, yield, lambda | 함수 정의 |
class, import, from, as | 클래스와 모듈 |
try, except, finally, raise | 예외 처리 |
True, False, None | 상수값 |
in, is, with, global, nonlocal | 기타 키워드 |
예약어 확인하기
Python에서 현재 사용 중인 모든 예약어를 확인할 수 있다.
[code lang="python"]import keyword
print(keyword.kwlist)
print(f"예약어 개수: {len(keyword.kwlist)}")
# 특정 단어가 예약어인지 확인
print(keyword.iskeyword('def')) # True
print(keyword.iskeyword('hello')) # False
예약어 사용 시 오류
# 다음은 모두 오류 발생
def = "함수" # SyntaxError
class = "클래스" # SyntaxError
if = "조건" # SyntaxError
for = "반복" # SyntaxError
의미 있는 변수명 작성
변수명은 해당 변수가 무엇을 저장하는지 명확하게 나타내야 한다.
좋은 변수명 예제
# 사용자 정보
user_name = "홍길동"
user_age = 25
user_email = "hong@example.com"
# 계산 관련
total_price = 15000
tax_rate = 0.1
discount_amount = 1500
# 상태 관련
is_logged_in = True
has_permission = False
is_valid_email = True
# 카운터
item_count = 10
retry_count = 3
max_attempts = 5
피해야 할 변수명
# 의미가 불분명한 변수명
a = "홍길동" # 무엇을 나타내는지 불분명
temp = 15000 # 임시? 온도?
data = True # 어떤 데이터?
x = 3 # x가 무엇인지 알 수 없음
# 너무 짧은 변수명
n = "홍길동" # name이 더 명확
p = 15000 # price가 더 명확
# 너무 긴 변수명
this_is_a_very_long_variable_name_for_user_information = "홍길동"
변수명 명명 규칙별 예제
다양한 명명 규칙을 사용한 실제 예제를 살펴보자.
스네이크 케이스 (권장)
# 일반 변수
first_name = "홍"
last_name = "길동"
birth_year = 1990
phone_number = "010-1234-5678"
# 함수
def calculate_total_price(price, tax_rate):
return price * (1 + tax_rate)
# 상수
MAX_FILE_SIZE = 1024 * 1024
DEFAULT_TIMEOUT = 30
API_BASE_URL = "https://api.example.com"
카멜 케이스
# JavaScript 스타일 (Python에서는 권장하지 않음)
firstName = "홍"
lastName = "길동"
birthYear = 1990
phoneNumber = "010-1234-5678"
def calculateTotalPrice(price, taxRate):
return price * (1 + taxRate)
파스칼 케이스
# 주로 클래스명에 사용
class UserAccount:
def __init__(self, user_name):
self.user_name = user_name
class DatabaseConnection:
def connect(self):
pass
특수한 변수명 패턴
Python에서 특별한 의미를 가지는 변수명 패턴들이다.
언더스코어로 시작하는 변수
# 단일 언더스코어: 내부 사용을 나타냄 (관례적)
_internal_variable = "내부 사용"
_helper_function = lambda x: x * 2
# 이중 언더스코어: 특별한 메서드나 속성
__special_method__ = "특별한 용도"
# 이중 언더스코어로 시작: 이름 맹글링 발생
__private_variable = "비공개"
임시 변수
# 언더스코어 하나: 사용하지 않는 값
for _ in range(5):
print("Hello")
# 튜플 언패킹에서 무시할 값
name, _, age = ("홍길동", "중간값", 25)
print(f"이름: {name}, 나이: {age}")
변수명 리팩토링
기존의 좋지 않은 변수명을 개선하는 예제를 살펴보자.
리팩토링 전
# 의미가 불분명한 코드
a = input("이름을 입력하세요: ")
b = int(input("나이를 입력하세요: "))
c = 2024 - b
if b >= 18:
d = "성인"
else:
d = "미성년자"
print(f"{a}님은 {c}년생 {d}입니다.")리팩토링 후
[code lang="python"]# 의미가 명확한 코드
user_name = input("이름을 입력하세요: ")
user_age = int(input("나이를 입력하세요: "))
birth_year = 2024 - user_age
if user_age >= 18:
age_category = "성인"
else:
age_category = "미성년자"
print(f"{user_name}님은 {birth_year}년생 {age_category}입니다.")도메인별 변수명 예제
다양한 분야에서 사용되는 변수명 예제들이다.
웹 개발
[code lang="python"]# 사용자 관련
user_id = 12345
username = "hongkd"
email_address = "hong@example.com"
password_hash = "abc123def456"
# HTTP 관련
request_method = "GET"
response_status = 200
api_endpoint = "/api/users"
request_headers = {"Content-Type": "application/json"}
데이터 분석
# 데이터셋 관련
dataset_size = 10000
feature_count = 25
target_variable = "price"
training_data = []
# 통계 관련
mean_value = 45.5
standard_deviation = 12.3
correlation_coefficient = 0.85
p_value = 0.01
게임 개발
# 플레이어 관련
player_name = "Hero"
player_level = 15
player_health = 100
player_score = 2500
# 게임 상태
game_state = "running"
current_level = 3
enemy_count = 5
power_up_active = True
변수명 검증 도구
변수명이 Python 규칙에 맞는지 확인하는 방법들이다.
식별자 유효성 검사
def is_valid_identifier(name):
"""변수명이 유효한 식별자인지 확인"""
import keyword
return name.isidentifier() and not keyword.iskeyword(name)
# 테스트
test_names = ["valid_name", "2invalid", "class", "my-var", "_private"]
for name in test_names:
print(f"{name}: {is_valid_identifier(name)}")내장 함수를 사용한 검사
[code lang="python"]import keyword
# 식별자 규칙 확인
print("valid_name".isidentifier()) # True
print("2invalid".isidentifier()) # False
print("my-var".isidentifier()) # False
# 예약어 확인
print(keyword.iskeyword("class")) # True
print(keyword.iskeyword("myvar")) # False
💡 변수명 작성 모범 사례:
• 스네이크 케이스를 사용하자 (Python 권장)
• 의미를 명확하게 나타내는 이름을 선택하자
• 너무 짧거나 너무 긴 이름은 피하자
• 약어보다는 전체 단어를 사용하자
• 일관된 네이밍 패턴을 유지하자
• 예약어와 내장 함수명은 피하자
실무에서의 변수명 예제
실제 프로젝트에서 사용되는 변수명 패턴을 살펴보자.
설정 관련 변수
# 데이터베이스 설정
DB_HOST = "localhost"
DB_PORT = 5432
DB_NAME = "myproject"
DB_USER = "admin"
DB_PASSWORD = "secret123"
# 애플리케이션 설정
DEBUG_MODE = True
LOG_LEVEL = "INFO"
MAX_CONNECTIONS = 100
CACHE_TIMEOUT = 3600
비즈니스 로직 변수
# 전자상거래 예제product_name = "노트북"
product_price = 1200000
discount_rate = 0.15
shipping_cost = 3000
# 계산
discounted_price = product_price * (1 - discount_rate)
total_amount = discounted_price + shipping_cost
final_price = int(total_amount)
print(f"최종 가격: {final_price:,}원")
좋은 변수명은 코드의 품질을 크게 향상시킨다. 처음에는 번거로울 수 있지만, 의미 있는 변수명을 사용하는 습관을 기르면 더 읽기 쉽고 유지보수하기 좋은 코드를 작성할 수 있다.