본문 바로가기

Programming/python

python 에서 global, protected, private에 대해서 알아보자 (전역과 보호)

파이썬에서 전역(global), 보호된(protected), 그리고 비공개(private) 속성은 객체 지향 프로그래밍(OOP)에서 사용되는 속성(데이터 멤버)의 종류입니다.

1. 전역 속성 (Global attributes):
전역 속성은 클래스 안이 아니라 모듈 수준에서 정의되는 속성입니다. 

모듈 전체에서 사용 가능하며, 다른 모듈에서도 호출할 수 있습니다. 

전역 속성은 보통 상수나 설정 값을 저장하는데 사용됩니다.

예를 들어, 다음과 같은 파이썬 모듈에서 전역 속성을 정의할 수 있습니다:

# 모듈 수준에서 전역 속성 정의
global_variable = 10

def some_function():
    print(global_variable)


2. 보호된 속성 (Protected attributes):
보호된 속성은 속성 이름 앞에 밑줄 두 개(__)를 붙여서 정의됩니다. 

이러한 형태로 정의된 속성은 해당 클래스의 서브클래스에서 접근이 가능하지만, 외부에서 직접 접근하면 안 됩니다. 

파이썬에서는 실제로 강제되는 것은 아니지만 관례적으로 해당 속성을 접근하지 말아야 합니다.

예를 들어:

class MyClass:
    def __init__(self):
        self._protected_attribute = 20

    def some_method(self):
        print(self._protected_attribute)


3. 비공개 속성 (Private attributes):
비공개 속성은 속성 이름 앞에 밑줄 두 개(__)를 두 번 사용하여 정의됩니다. 

이러한 속성은 클래스 외부에서 접근할 수 없습니다. 파이썬은 이름 맹글링(name mangling)을 사용하여 비공개 속성을 일종의 이름 변환을 거쳐 접근을 제한합니다.

예를 들어:

class MyClass:
    def __init__(self):
        self.__private_attribute = 30

    def some_method(self):
        print(self.__private_attribute)

# 비공개 속성에 접근하려면 이름 맹글링을 통해 접근해야 합니다.
obj = MyClass()
print(obj._MyClass__private_attribute)  # 출력: 30


전역 속성은 모듈 레벨에서 정의되고 모든 곳에서 접근 가능합니다. 

보호된 속성은 클래스 내부와 서브클래스에서 접근 가능하지만, 외부에서는 직접 접근하지 않는 것이 관례입니다. 

비공개 속성은 클래스 외부에서 직접 접근이 불가능하며, 이름 맹글링을 통해 간접적으로 접근할 수 있습니다. 

 

이러한 속성들을 적절하게 활용하여 클래스의 캡슐화(encapsulation)를 강화하고, 코드의 안정성과 유지보수성을 높이는 데에 도움이 됩니다.

반응형