Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 클래스에는 '비공개(private)' 변수가 존재할까?

결론부터 말하면, 파이썬에는 엄밀한 의미의 '비공개(private) 변수'가 존재하지 않습니다. 다른 객체지향 언어와 달리 파이썬에서는 클래스 내부의 모든 변수와 메서드가 기본적으로 공개(public) 상태입니다.

언더스코어를 활용한 비공개 변수 흉내 내기

다만 파이썬에서는 네이밍 컨벤션과 특별한 문법을 통해 비공개 변수를 흉내 낼 수 있습니다. 바로 변수 이름 앞에 언더스코어(_)를 붙이는 방식입니다.

1. 단일 언더스코어(_): 준비공개(semi-private)

변수 이름 앞에 언더스코어 하나를 붙이면, 이는 외부에서 직접 접근하지 말라는 개발자 간의 암묵적인 신호로 사용됩니다. 실제로 접근 자체는 가능하지만, 관례상 클래스 외부에서 사용하지 않는 것이 좋습니다.

2. 이중 언더스코어(__): 완전 비공개에 가까운 처리

변수 이름 앞에 언더스코어 두 개를 붙이면 파이썬 인터프리터가 네임 맹글링(name mangling)을 수행합니다. 예를 들어 클래스 내부의 __variable_ClassName__variable 형태로 이름이 변경되기 때문에, 해당 변수가 클래스 외부에서는 보이지 않거나 쉽게 접근할 수 없게 됩니다.

네임 맹글링으로도 완벽한 보안은 불가능

중요한 점은, 이렇게 처리된 '비공개 변수'도 실제로 안전하거나 철저히 숨겨진 것은 아니라는 사실입니다. 맹글링된 이름(_ClassName__variable)을 알면 충분히 접근할 수 있는 우회 코드가 존재하기 때문입니다.

정리하자면, 단일 언더스코어(_)와 이중 언더스코어(__) 접두사는 변수를 클래스 외부에서 접근하기 어렵게 만들고 가시성을 낮추는 역할을 할 뿐, 진정한 의미의 접근 제어 메커니즘은 아니라는 점을 기억해야 합니다.