WeniVooks

검색

견고한 파이썬

비공개 속성

1. 비공개 속성(Private Attributes)

대부분의 객체 지향 프로그래밍 언어에는 클래스의 속성과 메서드의 접근 제어를 위한 다양한 수준의 접근 제한자(access modifiers)가 있습니다. 다만, 이 비공개 속성은 완전한 "비공개"는 아니며 "비공개처럼" 작동하게 하는 기술입니다.

비공개 속성(Private Attributes)은 클래스 내부에서만 접근이 가능하며 외부에서는 접근이 제한되는 속성을 의미합니다. 파이썬에서는 속성 이름 앞에 두 개의 언더스코어(__)를 붙여 해당 속성을 비공개처럼 표현할 수 있습니다.

class MyClass: __a = 10 _a = 100 b = 20 def __init__(self, c, d): self.__c = c self.d = d c = MyClass(30, 40) # c.__a #error # c._a # 출력: 100 # c.b # 출력: 20 # c.__c # error c.d # 출력: 40

2. 네임 맹글링(Name Mangling)

속성 이름 앞에 두 개의 언더스코어를 붙이면 파이썬은 네임 맹글링(name mangling)이라는 메커니즘을 사용하여 속성의 이름을 변경합니다. 이로 인해 외부에서 해당 속성에 직접 접근하는 것이 어려워집니다.

그러나 완전히 접근을 제한하는 것은 아니기 때문에, 만약 아래와 같은 방법을 알고 있다면 _클래스명__속성명 형태로 여전히 접근과 수정이 가능합니다.

print(c._MyClass__c) # 출력: 30

보안상 중요한 내용이니 꼭 기억해두세요. 완전히 감춰지는 변수가 아닙니다.

3. 비공개 속성의 목적

파이썬에서는 속성의 완전한 비공개는 지원하지 않으나, 두 개의 언더스코어를 사용하여 비공개처럼 속성을 정의할 수 있습니다. 이는 클래스의 안정성을 유지하고, 객체의 내부 로직을 숨기기 위한 목적으로 활용됩니다.

{"packages":["numpy","pandas","matplotlib","lxml"]}
10.9 추상 클래스와 인터페이스10.11 상수 선언