Python/파이썬 오픈소스 배포

언더스코어(_)의 사용

monstro 2025. 6. 30. 21:06
728x90
반응형

- 개요

파이썬에서 _(언더스코어)는 다양한 역할을 수행한다

이를 간단하게 정리하면 다음과 같다

  • 파이썬 인터프리터에서의 마지막 연산 값
  • 값의 무시
  • 숫자에서의 자리 구분
  • 접근제어 수준 지정

 

1) 언더스코어를 통한 파이썬 인터프리터에서의 마지막 연산 값 반환

 

외부 IDE가 아닌, 파이썬 인터프리터에서 _(언더스코어)를 사용하면 마지막으로 연산한 값을 반환한다

 

2) 언더스코어를 통한 값의 무시

for value in enumerate(range(10)):
    print(value)

 

 

enumerate 연산자는 시퀀스 자료구조에서 인덱스와 값을 반환하는 함수이다

위와 같이 실행하면 인덱스와 인덱스에 해당하는 값이 반환되는 것을 볼 수 있다

 

for _, value in enumerate(range(5)):
    print(value)

 

 

이때 _(언더스코어)를 사용하면 의도적으로 무시할 수 있다

예제의 경우, 인덱스에 언더스코어를 사용하여 인덱스를 무시한 값만이 출력되는 것을 볼 수 있다

 

3) 언더스코어를 사용한 값의 무시 (2)

a, b, c = (1, 2, 3)
print(a, c)

 

 

파이썬에서는 여러 값하나의 인스턴스에 할당할 수 있는 패킹이라는 개념이 존재한다

 

d, _, f = (10, 20, 30)
print(d, f)

 

 

이때 언더스코어(_)를 사용하면 특정 값을 무시하여 패킹하는 것이 가능하다

 

x, *y, z = (1, 2, 3, 4, 5)
print(x, y, z)

 

 

* 연산자를 사용하면 값의 범위를 지정하여 하나의 인스턴스에 패킹하는 것이 가능하다

 

xx, *_, zz = (10, 20, 30, 40, 50)
print(xx, zz)

 

 

이를 응용하면 언더스코어(_)를 통해 의도적으로 값을 무시할 범위를 지정하고 패킹하는 것이 가능하다

 

4) 숫자에서의 자리 구분

num1 = 1_000_000
num2 = 7777_7777_7777
print(num1)
print(num2)

 

 

정수형 변수의 값을 정의할 때, 언더스코어(_)를 사용하여 자리를 구분지어줄 수 있다

 

5) 접근제어 수준 지정

코드의 사용을 알아보기 이전에, 언더스코어는 클래스 내의 프로퍼티에서 다음과 같이 사용할 수 있다

  • 프로퍼티명 : public 설정
  • _프로퍼티명 : protected 설정
  • __프로퍼티명 : 해당 프로퍼티에 대한 name mangling 적용

 

우선, 파이썬에서 접근제어는 절대적이지 않다

따라서 원하는 만큼 프로퍼티에 접근하고 값을 설정할 수 있지만,

설계 구조를 해치는 행위이므로 접근제어 수준의 지정은 일종의 개발 규약으로서 동작한다

 

name mangling프로퍼티의 이름을 _클래스명__프로퍼티명으로 변경한다

위와 같이 변경하는 이유클래스가 여러 번 확장되더라도 충돌 없이 오버라이드를 하기 위함이다

 

class SampleA:
    def __init__(self):
        self.x = 0      # public
        self._y = 0     # protected
        self.__z = 0    # name mangling

a = SampleA()
a.x = 1

print(f"{a.x}")  
print(f"{a._y}")
print(f"{a._SampleA__z}")

 

위와 같이 클래스 SampleA를 생성하고 프로퍼티를 각각 public / protected / name mangling으로 설정하였다

이후 public으로 설정x 프로퍼티의 값1로 설정하였다

 

 

실행 결과는 위와 같다

파이썬에서 접근 제어 수준은 절대적이지 않으므로 y 프로퍼티z 프로퍼티 역시 값을 변경할 수 있다

다만 name mangling된 변수반드시 name mangling된 이름을 사용해야 접근할 수 있다

728x90
반응형

'Python > 파이썬 오픈소스 배포' 카테고리의 다른 글

메서드 오버라이딩  (0) 2025.07.01
Getter 메서드와 Setter 메서드  (0) 2025.07.01
Context Manager Annotation  (0) 2025.06.27
Context Manager (2)  (0) 2025.06.24
Context Manager (1)  (0) 2025.06.24