메뉴 닫기

파이썬 식별자 키워드 예약어 목록과 언더스코어 관례 완벽 정리

파이썬 식별자 키워드 예약어 목록과 언더스코어 관례 완벽 정리

🐍 파이썬 식별자와 키워드 개념을 한 번에 정리하고 안전한 네이밍 습관을 만드는 법

코드를 배우다 보면 변수와 함수 이름을 어떻게 지어야 할지, 무엇이 허용되고 금지되는지에서 막히는 순간이 자주 등장합니다.
파이썬에서는 이름을 짓는 규칙인 식별자 규칙과, 이름으로 사용할 수 없는 예약어 집합이 명확히 정해져 있습니다.
여기에 더해 언더스코어 사용 관례까지 이해하면, 읽기 좋은 코드와 예기치 않은 오류를 동시에 피할 수 있습니다.
특히 False, True, None은 값처럼 보이지만 키워드라는 점을 놓치기 쉽습니다.
이 글은 기초 문법을 정돈하려는 초심자부터 팀 코드 스타일을 단단히 다지고 싶은 분까지, 실전에서 바로 써먹을 수 있도록 핵심만 쉽고 정확하게 풀어냅니다.

오늘 정리는 파이썬 언어의 기본기 중에서도 실수를 가장 많이 만드는 영역을 중심으로 구성했습니다.
먼저 식별자가 무엇인지, 어떤 문자가 허용되는지부터 차근차근 확인합니다.
이어 최신 버전 기준 예약어 목록과 각 키워드의 역할을 알아보고, 언더스코어 한 개와 두 개, 그리고 특수한 __name__의 의미를 깔끔하게 구분합니다.
마지막으로 네이밍 베스트 프랙티스와 키워드 충돌을 예방하는 방법까지 정리해, 프로젝트 규모와 상관없이 안정적으로 적용할 수 있는 기준을 제시합니다.



🔎 파이썬 식별자란 무엇인가

식별자는 변수, 함수, 클래스, 모듈 등 코드의 대상에 붙이는 이름을 뜻합니다.
파이썬은 사람이 읽기 쉬운 이름을 권장하며, 문법적으로 허용되는 문자 집합과 배치 규칙이 정해져 있습니다.
기본 원칙은 다음과 같습니다.
첫 글자는 영문자 또는 언더스코어(_)만 가능합니다.
숫자는 첫 글자로 사용할 수 없지만, 두 번째 글자 이후에는 사용할 수 있습니다.
알파벳 대소문자를 구분하므로 totalTotal은 서로 다른 이름입니다.
또한 파이썬은 유니코드를 지원하므로 한글도 식별자로 사용할 수 있으나, 팀 협업과 호환성을 위해 영문 snake_case를 권장합니다.

🧩 허용 문자와 금지 규칙

식별자는 문자(유니코드 포함), 숫자, 언더스코어로 구성됩니다.
공백, 하이픈(-), 마침표(.) 등 특수문자는 사용할 수 없습니다.
파이썬 문법에서 특별한 의미를 가지는 예약어(키워드)는 식별자로 쓸 수 없습니다.
특히 False, True, None은 값처럼 보이지만 키워드이므로 이름으로 사용하면 문법 오류가 발생합니다.

CODE BLOCK
# ✅ 올바른 식별자
count = 0
user_name = "kim"
_total = 10            # 내부용 관례
한글이름 = "가능하지만_권장X"

# ❌ 잘못된 식별자 (문법 오류)
2nd = 1               # 숫자로 시작 불가
user-name = "lee"     # 하이픈 사용 불가
class = "A"           # 예약어 사용 불가
True = 1              # 키워드 사용 불가

🧭 대소문자 구분과 가독성

파이썬은 대소문자를 구분합니다.
같은 철자라도 대소문자가 다르면 서로 다른 이름입니다.
혼동을 줄이려면 의미 있는 단어를 소문자로 쓰고 단어 사이를 언더스코어로 구분하는 snake_case를 변수와 함수에 적용합니다.
클래스 이름은 관례적으로 PascalCase를 사용합니다.
상수처럼 다루는 값은 모듈 상단에 UPPER_SNAKE_CASE로 선언하면 의도가 분명해집니다.

허용/권장 금지/비권장
letters, digits, _ 로 구성. 공백, 하이픈(-), 마침표(.), 특수문자.
첫 글자: 문자 또는 _. 첫 글자에 숫자 사용.
snake_case, PascalCase, UPPER_SNAKE_CASE. 예약어(예: False, True, None 등) 사용.
  • 🧪첫 글자가 숫자인지 확인하고, 아니라면 통과.
  • 🧹공백/하이픈/마침표 등 특수문자 포함 여부 점검.
  • 📚예약어와 충돌하지 않는지 검토.
    False, True, None은 키워드라서 사용 불가.
  • 👀가독성을 위해 영문 snake_case로 통일.

💡 TIP: 내부 구현 디테일을 숨기고 싶다면 앞에 언더스코어를 붙여 _internal_value처럼 이름을 정합니다.
이는 모듈 외부에서의 사용을 억제하려는 관례이며, 동작 자체를 막는 보안 장치는 아닙니다.

⚠️ 주의: 운영체제나 서드파티 라이브러리에서 사용하는 특수 이름과 충돌을 피하세요.
예를 들어 __name__은 파이썬이 모듈 실행 맥락을 표현할 때 쓰는 특별한 이름이므로 임의 변수로 사용하지 않습니다.

🧾 예약어 목록과 키워드의 역할

파이썬에는 특별한 의미를 가지는 단어들이 있습니다.
이들은 예약어(reserved words) 또는 키워드(keyword)라 불리며, 프로그래밍 언어가 내부적으로 사용하는 구문이기 때문에 식별자로 사용할 수 없습니다.
예를 들어 if, for, class 등은 파이썬이 문법 구조를 정의할 때 쓰이므로, 이를 변수나 함수 이름으로 사용하려고 하면 오류가 발생합니다.

이 키워드는 파이썬 버전마다 조금씩 달라질 수 있습니다.
따라서 사용하는 환경의 버전에 따라 keyword 모듈을 통해 목록을 직접 확인할 수 있습니다.

CODE BLOCK
import keyword

# 현재 파이썬 버전의 예약어 목록 확인
print(keyword.kwlist)
print(len(keyword.kwlist))  # 예약어 개수 확인

2025년 기준 파이썬 3.12 버전의 예약어는 다음과 같습니다.

파이썬 예약어 목록 (3.12 기준)
False, None, True, and, as, assert, async, await, break, class, continue, def, del, elif, else, except, finally, for, from, global, if, import, in, is, lambda, nonlocal, not, or, pass, raise, return, try, while, with, yield

이 중에서도 False, True, None은 특별한 상수형 키워드로, 불리언 값과 비어있는 상태를 표현합니다.
이들은 변수처럼 값을 재할당할 수 없습니다.

CODE BLOCK
# False, True, None은 키워드이므로 재정의 불가

False = 0   # ❌ SyntaxError 발생
None = "값 없음"  # ❌ SyntaxError 발생

💬 키워드는 언어가 내부적으로 사용하는 예약된 이름입니다.
따라서 프로그램 내에서 변수, 함수, 클래스 이름으로 재사용하려 하면 문법 오류가 발생합니다.
이 규칙은 코드의 예측 가능성과 일관성을 유지하기 위한 핵심 원칙입니다.

💡 TIP: 파이썬의 예약어는 버전마다 변경될 수 있습니다.
따라서 환경별로 keyword.kwlist를 실행해 현재 버전에서 사용 중인 키워드를 확인하는 습관을 들이면, 버전 호환 문제를 예방할 수 있습니다.

⚠️ 주의: 키워드와 동일한 이름의 변수를 임시로 사용하면, 기존 문법 의미를 덮어써 의도치 않은 오류를 만들 수 있습니다.
예를 들어 liststr과 같은 내장 타입 이름을 변수로 재정의하지 마세요.



🧠 언더스코어 관례 _ __name__ _ 의 의미

파이썬에서 언더스코어(_)는 단순한 문자 이상의 의미를 가집니다.
이 기호는 이름 앞뒤에 붙는 개수나 위치에 따라 서로 다른 관례와 용도가 있습니다.
이 규칙들은 언어 문법적으로 강제되는 것은 아니지만, 파이썬 개발자 커뮤니티에서 널리 인정된 표준 코딩 컨벤션(PEP 8)입니다.

📍 한 개 언더스코어(_variable)

이름 앞에 한 개의 언더스코어(_)가 붙으면, 해당 이름이 비공개 변수(private)처럼 사용되길 의도했다는 뜻입니다.
실제 접근이 막히는 것은 아니지만, “이건 외부에서 직접 쓰지 마세요”라는 암묵적인 신호로 해석됩니다.

CODE BLOCK
class User:
    def __init__(self, name):
        self._name = name  # 내부용 속성 (외부 직접 접근 비권장)

user = User("kim")
print(user._name)  # 동작은 하지만 비추천

🔒 두 개 언더스코어(__variable)

이름 앞에 언더스코어를 두 개(__) 붙이면 네임 맹글링(name mangling)이 적용됩니다.
즉, 클래스 내부의 이름 충돌을 방지하기 위해 파이썬이 자동으로 변수 이름을 변경합니다.
이때 이름은 내부적으로 _클래스명__변수명 형태로 변환됩니다.

CODE BLOCK
class Person:
    def __init__(self, name):
        self.__name = name  # 이름 맹글링 적용

p = Person("Lee")
print(p.__name)        # ❌ AttributeError
print(p._Person__name) # ✅ 내부적으로 변경된 이름

이 기법은 클래스 상속 시 변수명이 충돌하는 것을 방지하는 역할을 합니다.
단, 완벽한 접근 차단은 아니며 내부 규칙을 알고 있다면 접근이 가능합니다.

🧩 앞뒤로 언더스코어(__variable__)

앞뒤에 언더스코어가 두 개씩 붙은 이름(__init__, __name__ 등)은 파이썬 시스템이 내부적으로 사용하는 특수 속성(special attributes)이나 매직 메서드(magic methods)입니다.
개발자가 새로 정의할 때는 이런 형태를 피해야 합니다.
대표적인 예로, __name__은 모듈의 실행 환경을 판별하는 내장 변수입니다.

CODE BLOCK
# 현재 모듈이 직접 실행된 경우
if __name__ == "__main__":
    print("직접 실행됨")
else:
    print("다른 모듈에서 import됨")

즉, __name__ 변수는 코드가 실행되는 맥락(직접 실행인지, import된 것인지)을 구분해주는 중요한 역할을 합니다.
이러한 언더스코어 규칙을 잘 지키면 가독성과 유지보수성이 크게 향상됩니다.

💎 핵심 포인트:
언더스코어는 단순한 문법 요소가 아닌, 코드의 의도를 전달하는 중요한 신호입니다.
특히 __name__은 모듈의 실행 여부를 판별하는 시스템 변수이므로 절대 변수명으로 덮어쓰면 안 됩니다.

✍️ 식별자 네이밍 규칙과 베스트 프랙티스

좋은 식별자는 단순히 문법적으로 올바른 이름을 넘어서, 코드의 의도를 명확히 전달해야 합니다.
파이썬 커뮤니티에서는 일관된 코딩 스타일을 유지하기 위해 PEP 8 규칙을 권장합니다.
이 규칙에 따라 변수명, 함수명, 클래스명, 상수명에는 각각 다른 네이밍 패턴을 사용합니다.

📚 변수와 함수 이름: snake_case

변수명과 함수명은 모두 소문자로 작성하며, 단어 사이를 언더스코어(_)로 구분합니다.
이 방식을 snake_case라 부릅니다.
이 패턴은 읽기 쉽고 오타를 줄여주며, 파이썬의 표준 라이브러리 대부분이 동일한 형식을 따릅니다.

CODE BLOCK
# ✅ 권장
user_name = "Lee"
max_score = 100

# ❌ 비권장
UserName = "Lee"
maxScore = 100

🏛️ 클래스 이름: PascalCase

클래스 이름은 각 단어의 첫 글자를 대문자로 쓰는 PascalCase 방식으로 작성합니다.
이 규칙은 클래스와 함수, 변수를 쉽게 구분할 수 있게 해줍니다.

CODE BLOCK
# ✅ 권장
class StudentProfile:
    pass

# ❌ 비권장
class student_profile:
    pass

🔠 상수 이름: UPPER_SNAKE_CASE

상수는 일반적으로 모두 대문자로 작성하며, 단어 사이를 언더스코어로 구분합니다.
이 형식은 코드 상에서 “이 값은 바뀌지 않는다”는 의도를 전달합니다.

CODE BLOCK
MAX_RETRY = 3
API_ENDPOINT = "https://api.example.com"
PI = 3.1415926535

  • 🧩함수·변수는 snake_case로 통일.
  • 🏗️클래스 이름은 PascalCase로 작성.
  • 🔠상수는 UPPER_SNAKE_CASE 형식 사용.
  • 🚫내장 타입(list, str, dict 등)과 동일한 이름 사용 금지.
  • 🧠짧지만 의미가 명확한 이름을 우선.

💬 식별자는 코드 품질을 좌우하는 중요한 요소입니다.
한 번 정해진 규칙을 프로젝트 전체에 일관되게 유지하는 것이 유지보수성과 협업 효율을 높이는 핵심입니다.



🚫 키워드와 식별자 충돌 피하는 법

파이썬 코드를 작성하다 보면 변수나 함수 이름이 언어의 예약어(키워드) 혹은 내장 함수와 충돌하는 경우가 자주 생깁니다.
이런 상황을 피하지 않으면 예기치 못한 동작이나 오류를 일으킬 수 있습니다.
예를 들어 liststr 같은 이름을 변수로 사용하면, 내장 타입이 덮어씌워져 이후 코드에서 정상 동작하지 않습니다.

CODE BLOCK
# ❌ 잘못된 예
list = [1, 2, 3]
print(list(10))  # TypeError: 'list' object is not callable

이처럼 내장 이름을 변수로 재정의하면, 그 이름이 함수나 클래스가 아닌 데이터로 바뀌기 때문에 예기치 못한 오류가 발생합니다.
이 문제를 예방하기 위한 실전 요령은 다음과 같습니다.

  • ⚙️사용 전 keyword.iskeyword() 함수로 예약어 여부를 검사.
  • 🔍내장 함수·클래스 이름(list, str, dict, input 등)을 피하고 의미 있는 이름 사용.
  • 🪄불가피하게 동일한 단어가 필요하면 뒤에 언더스코어를 추가 (list_, id_ 등).
  • 📦프로젝트 전체 네이밍 규칙을 정의하고 일관되게 유지.
CODE BLOCK
import keyword

# 키워드 검사
print(keyword.iskeyword("class"))   # True
print(keyword.iskeyword("value"))   # False

# 내장 이름 충돌 피하기
list_ = [1, 2, 3]
print(len(list_))

💬 파이썬은 유연한 언어지만, 키워드와 내장 이름을 덮어쓰는 순간 예상치 못한 오류가 생길 수 있습니다.
특히 False, True, None은 단순한 값이 아닌 키워드이므로 절대 재정의해서는 안 됩니다.

💡 TIP: 내장 이름을 이미 재정의해버렸다면 del 키워드로 해당 변수명을 삭제해 복원할 수 있습니다.
예를 들어 del list를 실행하면 내장 list() 함수가 다시 정상 동작합니다.

💎 핵심 포인트:
예약어와 내장 이름은 파이썬 언어 자체의 일부입니다.
의도치 않게 덮어쓰지 않도록 항상 keyword.iskeyword()로 확인하고, 불가피할 경우 이름 끝에 언더스코어를 붙이는 습관을 들이세요.

자주 묻는 질문 (FAQ)

파이썬에서 식별자는 꼭 영어로만 써야 하나요?
파이썬은 유니코드를 지원하기 때문에 한글 식별자도 가능합니다.
하지만 협업과 호환성 측면에서 영어 기반의 snake_case 규칙을 사용하는 것이 권장됩니다.
False, True, None을 변수로 쓸 수 있나요?
불가능합니다.
이 세 단어는 파이썬 키워드로 예약되어 있으며, 재정의하려 하면 SyntaxError가 발생합니다.
__name__ 변수는 왜 특별한가요?
__name__은 파이썬이 모듈의 실행 환경을 구분할 때 사용하는 특수 변수입니다.
모듈이 직접 실행될 때는 “__main__”으로 설정되고, import 될 경우 모듈 이름이 들어갑니다.
예약어 목록은 파이썬 버전에 따라 바뀌나요?
네, 버전에 따라 추가되거나 변경될 수 있습니다.
최신 목록은 keyword.kwlist로 확인하는 것이 가장 정확합니다.
_variable과 __variable의 차이는 무엇인가요?
한 개 언더스코어는 “비공개용” 관례를 의미하고, 두 개 언더스코어는 이름 충돌을 방지하는 네임 맹글링(name mangling)이 적용됩니다.
내장 함수 이름과 같은 변수를 써도 되나요?
사용은 가능하지만 권장되지 않습니다.
예를 들어 list = []로 정의하면 내장 list() 함수가 덮어씌워집니다.
불가피할 경우 list_와 같이 언더스코어를 추가하세요.
식별자 이름에 숫자를 포함할 수 있나요?
가능합니다.
다만 숫자는 첫 글자로 사용할 수 없고, 두 번째 문자부터 사용할 수 있습니다.
예: value1 (가능), 1value (불가)
식별자를 잘못 만들면 어떤 오류가 생기나요?
규칙을 어기면 SyntaxError 또는 NameError가 발생합니다.
예를 들어 2nd = 10처럼 숫자로 시작하거나 class = “A”처럼 키워드를 변수로 쓰면 오류가 납니다.

🧾 파이썬 식별자와 키워드 이해로 코드 품질 높이기

파이썬의 식별자와 키워드는 언어의 뼈대를 이루는 기본 요소입니다.
식별자는 단순한 이름 이상의 의미를 가지며, 코드의 가독성과 유지보수성을 결정짓는 중요한 요소입니다.
예약어와 내장 이름을 구분하고, 언더스코어의 다양한 관례를 이해하면 의도치 않은 오류를 방지할 수 있습니다.

또한 False, True, None은 값처럼 보이지만 실제로는 키워드이며, 재정의할 수 없다는 점을 꼭 기억해야 합니다.
언더스코어 관례(_variable, __name__, __var__)를 올바르게 활용하면 코드의 구조가 명확해지고, 모듈화 및 확장성 면에서도 큰 도움이 됩니다.

결국, 좋은 파이썬 코드는 명료한 식별자와 키워드의 올바른 사용에서 시작됩니다.
오늘 배운 규칙을 프로젝트 전반에 적용한다면 협업 효율이 높아지고, 유지보수가 쉬운 안정적인 코드를 완성할 수 있을 것입니다.


🏷️ 관련 태그 : 파이썬기초, 식별자, 파이썬키워드, 예약어목록, 언더스코어관례, __name__, PEP8, 파이썬문법, 프로그래밍기초, 파이썬입문