ABOUT ME

Today
Yesterday
Total
  • [Python] 변수에서 언더바(_)를 쓰는 경우 알아보기
    Python/파이썬 기초 2025. 4. 10. 18:14
    반응형

    파이썬의 변수에서 언더바(_)를 쓰는 경우 알아보기


    종종 파이썬(Python)으로 코딩을 할 때, 변수 이름에서 언더바(_)를 발견할 수 있습니다. 파이썬은 문자, 숫자, 언더바를 자유롭게 변수에 사용할 수 있기 때문에 특별한 의식을 하지 않고 쓰는 경우가 있지만, 파이썬에서 _ 또는 __로 시작하는 변수는 특별한 의미나 용도를 갖고 있기 때문에 어떤 역할을 하는지 알아두시는걸 추천드립니다.

     

     

    언더바 하나만 쓰는 경우: _


    1. 더미 변수

    파이썬에서는 따로 호출하지 않는 일회성 변수를 관례적으로 _ 로 표기하는 편입니다. 예를 들어, 우리가 반복문을 배울 때

     

    for i in range(5): 
        print('hello')

     

    위와 같은 표현을 즐겨 사용하지만, 실제로는 i 라는 변수를 따로 쓰는 경우가 생길 수 있습니다. 이 때, 다른 곳에서 사용하는 i 변수와의 혼동을 줄이기 위해서는

     

    for _ in range(5): 
        print('hello')

     

    라고 표현하는 것이 더욱 좋다는 말이지요. 이렇게 사용하는 _ 는 더미 변수(Dummy variable)라고 합니다.

     


    2. 마지막 리턴값

    파이썬 인터프리터에서는 마지막 리턴값을 _ 변수에 받아두는 편의기능이 있습니다. 이 기능은 프로그래밍을 할 때 직접적으로 사용하는 경우가 드물지만, 파이썬을 간이 계산기처럼 쓰거나, 코드를 테스트할 때 유용하게 활용할 수 있지요. 예를 들어, 123 + 456 + 789 를 계산할 때는 이렇게 할 수도 있습니다.

     

    123 + 456
    >>> 579
    
    _ + 789
    >>> 1368

     

     

    언더바 하나를 앞에 두는 경우: _var


    _var 와 같은 형식으로 변수를 지정하면, 이는 내부에서만 사용한다는 의미를 가지게 됩니다. 물론, 파이썬은 변수의 선언 및 수정이 자유로운 언어이기 때문에 강제성은 없습니다. 그래서 이런 표현을 약한 내부 사용 지시자(Weak internal use indicator) 라고들 이야기합니다. 이런 변수 선언은 아래와 같이 예시를 들어볼 수 있습니다.

     

    class MyClass:
        def __init__(self):
            self._internal_value = 12345  # 외부에서 사용하지 말라는 의미

     

     

    언더바 두 개를 앞에 두는 경우: __var


    언더바 두 개를 앞에 두는 경우는 파이썬에서 맹글링(Mangling) 이라고 하는 특수한 표기법입니다. 단순히 이름만 다를 뿐, 아무런 효과도 없는 앞선 예시와 달리, 맹글링이 적용된 변수 이름은 직접적인 차이가 보입니다. 아래에 맹글링의 예시를 하나 들어보겠습니다.

     

    class MyClass:
        def __init__(self):
            self.__value = 12345  # 맹글링이 적용된 변수
    
    obj = MyClass()
    obj.__value
    ---------------------------------------------------------------------------
    
    AttributeError                            Traceback (most recent call last)
    
    Cell In[1], line 6
          3         self.__value = 12345  # 맹글링이 적용된 변수
          5 obj = MyClass()
    ----> 6 obj.__value
    
    
    AttributeError: 'MyClass' object has no attribute '__value'

     

    위 코드를 실행하면, AttributeError 가 발생합니다. 분명히 __value 라는 이름을 지었는데, 문제가 생기는 이유는 맹글링의 효과로 이 변수의 이름이 바뀌었기 때문이지요.

     

    obj._MyClass__value
    12345

     

    위와 같이, 맹글링된 변수는 _클래스이름__변수명 으로 변환되기 때문에 변수 이름을 중복해서 만드는 실수를 원천적으로 막아주는 효과가 있습니다.

     

     

    언더바 두 개를 앞뒤에 놓는 경우: __method__


    언더바 두 개는 일반적으로 유저가 사용할 일은 없는 변수입니다. 왜냐하면, 이런 표기법을 보여주는 대상은 주로 사전 정의된 변수이기 때문이지요. 이런 이름은 대부분 특수한 기능을 수행하는 메소드라는 공통점이 있습니다. 예를 들면, 클래스 초기화를 위한 메소드인 __init__ 이나 문자열을 의미하는 __str__ 등이 있습니다.

    반응형

    댓글

문의: jwkang3929@naver.com