여러분이 사용하고 계신 브라우저는 HTML5를 지원하지 않기 때문에 몇몇 요소가 제대로 보이도록 JScript를 사용하고 있습니다. 하지만 여러분의 브라우저 설정에서 스크립트 기능이 꺼져있으므로, 현재 페이지를 제대로 확인하시려면 스크립트 기능을 켜주셔야 합니다. Python - 변수명

Python – 변수명

3주전 작성

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:,}원")

좋은 변수명은 코드의 품질을 크게 향상시킨다. 처음에는 번거로울 수 있지만, 의미 있는 변수명을 사용하는 습관을 기르면 더 읽기 쉽고 유지보수하기 좋은 코드를 작성할 수 있다.

참고
Mingg`s Diary
밍구
공부 목적 블로그