- 개요
파이썬에서 _(언더스코어)는 다양한 역할을 수행한다
이를 간단하게 정리하면 다음과 같다
- 파이썬 인터프리터에서의 마지막 연산 값
- 값의 무시
- 숫자에서의 자리 구분
- 접근제어 수준 지정
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된 이름을 사용해야 접근할 수 있다
'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 |