1. 목표

 

2. 파일명 (.py)

더보기

기본 규칙

  • 모두 소문자
  • 단어 구분은 underscore("_")
  • 동사보다는 역할 또는 개념 중심
  • 한 파일 = 한 책임(SRP 원칙)

 

권장 형식

lowercase_with_underscores.py

 

예시


용도 파일명
메인 실행 파일 main.py
DB 관리 database_manager.py
회원 관리 member_manager.py
회원 페이지(UI) member_page.py
설정 파일 config.py
유틸리티 string_utils.py

 

3. 클래스명

더보기

기본 규칙

  • PascalCase (CapWords)
  • 명사 또는 명사구
  • 역할이 명확히 드러나도록 작성

 

 

권장 형식

class DatabaseManager:
    pass

class Member:
    pass

class MemberManagerPage:
    pass

class LoginDialog:
    pass

 

4. 변수명

더보기

기본 규칙

  • snake_case
  • 소문자 사용
  • 의미 있는 이름 사용
  • 너무 짧은 이름은 제한적으로 사용

 

 

권장 형식

member_id = 1
member_name = "홍길동"
db_connection = None
current_page_index = 0

 

 

피해야 할 예시

a = 10          # 의미 없음
data1 = "abc"  # 역할 불명확
MemberName = "" # 클래스처럼 보임

 

5. 상수명

더보기

기본 규칙

  • 모두 대문자
  • 단어 구분은 underscore
  • 모듈 상단에 선언

 

 

권장 형식

MAX_RETRY_COUNT = 3
DEFAULT_TIMEOUT = 30
DB_HOST = "localhost"

 

6. 함수명

더보기

기본 규칙

  • snake_case
  • 동사 또는 동사구 사용
  • 동작을 명확히 표현

 

권장 형식

def connect_database():
    pass

def load_members():
    pass

def save_member(member):
    pass

def validate_input(text):
    pass

 

 

메서드(클래스 함수) 예시

class DatabaseManager:
    def connect(self):
        pass

    def execute_query(self, sql):
        pass

class MemberService:
    def add_member(self, member):
        pass

    def remove_member(self, member_id):
        pass

 

7. _var (단일 언더스코어) /  __var (이중 언더스코어) 관례 

더보기

7.1 Python의 철학

  • Python은 C++, Java, C#처럼 private, protected, public 키워드처럼
    강제적 접근 제한(access modifier) 을 두지 않습니다.
  • 대신 이름 규칙 과 관례(convention) 를 통해 개발자 간의 약속을 사용합니다. 

 

 

7.2 _var (단일 언더스코어)

 

7.2.1 예시와 의미

_var
_method()
  • "이 변수/메서드는 외부에서 직접 사용하지 마세요"

 

7.2.2 기술적 접근과 실무에서 암묵 협의 관점

class UserService:
    def __init__(self):
        self._cache = {}

    def _load_cache(self):
        print("캐시 로딩")

# 기술적 관점
service = UserService()
service._cache = {}          # 사용 가능 하지만, 암묵적으로 사용하지 않음
service._load_cache()        # 사용 가능 하지만, 암묵적으로 사용하지 않음
  • 기술적으로는 완전히 접근 가능합니다.
    하지만 IDE, 코드 리뷰, 협업에서 "이건 내부 구현이니 건드리지 마세요" 강력한 신호
  • 상속받은 클래스에서는 사용 가능하여
    protected 느낌에 가장 가깝습니다.

 

 

7.3 __var (이중 언더스코어)

 

7.3.1 예시와 의미

# [1] 작성

__var
__method()

# [2] 파이썬 인터피르터가 맹글링하여 아래처럼 변환함

_ClassName__variable
_ClassName__method

 

 

7.3.2  이름 맹글링

클래스 내부에서 이중 언더스코어("__")로 시작하는 식별자 이름을 Python 인터프리터가 자동으로 변경하는 규칙입니다.

 

Python의 이름 맹글링은, 
접근을 완전히 막기 위한 private 구현이 아니라,
상속 구조에서 안전한 캡슐화를 제공하기 위한 장치입니다.

 

 


7.3.3 권장 형식 (1)

예시

class UserService:
    def __init__(self):
        self.__token = "abc"

내부적으로 변환되는 실제 이름

__token -> _UserService__token

실제 사용

service = UserService()

service.__token
# AttributeError: 'UserService' object has no attribute '__token'


service._UserService__token
# "abc
# 정상 접근 가능

 


7.3.4 권장 형식 (2) - 상속에서 충돌 방지

예시

class BaseService:
    def __init__(self):
        self.__config = "base"

class ChildService(BaseService):
    def __init__(self):
        super().__init__()
        self.__config = "child"

service = ChildService()

내부적으로 변환되는 실제 이름

BaseService의 __config -> _BaseService__config
ChildService의 __config -> _ChildService__config

실제 사용

service = childService()

service.__config
# AttributeError: 'ChildService' object has no attribute '__config'


service._BaseService__config
# "base"

service._ChildService__config
# "child"

# 정상 접근 가능