[Python] 정보은닉과 _ , __ 2025-01-20

정지은·2025년 1월 20일
0

나머지공부

목록 보기
3/17

클래스 내의 변수나 메서드 앞에 _(single underscore) 또는 __(double underscore)를 사용하는 것은 정보 은닉과 관련된 컨벤션을 따르는 방식입니다.
아래는 각각의 차이점과 특징을 정리한 내용입니다.


_ (Single Underscore)

  1. 의미와 용도:

    • _"protected"로 간주되며, 변수나 메서드가 외부에서 직접 접근하지 않기를 권장하는 컨벤션입니다.
    • 접근 자체를 막지는 않지만, 사용자가 조심해야 한다는 신호로 작용합니다.
  2. 특징:

    • 외부에서 접근 가능:
      class Person:
          def __init__(self, name):
              self._name = name
      p = Person("홍길동")
      print(p._name)  # 외부에서 접근 가능
    • 주로 내부 구현 세부사항(Helper function 또는 private-like 속성)을 나타내기 위해 사용됩니다.텍스트
    • Python 인터프리터는 _로 시작하는 이름을 특별히 다루지 않습니다.
  3. 주요 단점:

    • 정보 은닉이 강제되지 않기 때문에, 개발자가 실수로도 접근하거나 변경할 수 있습니다.

__ (Double Underscore)

  1. 의미와 용도:

    • __"private"처럼 동작하며, 변수나 메서드가 클래스 외부에서 직접 접근하지 못하도록 네임 맹글링(name mangling)을 적용합니다.
    • 실제 이름이 내부적으로 변경되어 클래스 외부에서 접근하기 어렵게 만듭니다.
  2. 특징:

    • 네임 맹글링:
      • Python은 __로 시작하는 속성 이름을 클래스명으로 변경합니다.
      • 예를 들어, self.__name은 내부적으로 _ClassName__name으로 변경됩니다.
      class Person:
          def __init__(self, name):
              self.__name = name
      p = Person("홍길동")
      print(p.__name)  # AttributeError 발생
      print(p._Person__name)  # '홍길동' 출력 (내부적으로 맹글링된 이름을 직접 사용)
    • 외부에서 접근을 어렵게 하여, 정보 은닉 수준을 높입니다.
  3. 주요 단점:

    • 완전히 은닉되는 것은 아니며, 맹글링된 이름을 통해 여전히 접근 가능합니다.
    • 디버깅이나 유지보수 시 가독성이 약간 떨어질 수 있습니다.

_ vs __ 비교 요약

특징_ (Single Underscore)__ (Double Underscore)
의미Protected-likePrivate-like
접근 제한접근 가능 (컨벤션 상 조심)네임 맹글링으로 외부 접근 차단
네임 맹글링없음있음 (클래스명 포함하여 이름 변경)
사용 목적내부 구현 세부사항을 알리는 용도변수나 메서드의 정보 은닉
외부 접근성접근 가능맹글링된 이름으로만 접근 가능
주의 사항컨벤션에 의존여전히 내부적으로 접근 가능

요약

  • _컨벤션에 기반한 접근 제한으로, 사용자가 신중하게 다루기를 권장합니다.
  • __는 Python의 네임 맹글링을 활용하여 보다 강력한 정보 은닉을 제공합니다.
  • 강력한 정보 은닉이 필요한 경우 __를 사용하며, 단순히 내부 변수임을 알리고 싶은 경우 _를 사용합니다.

0개의 댓글