inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

모두를 위한 파이썬 : 필수 문법 배우기 Feat. 오픈소스 패키지 배포 (Inflearn Original)

Property(1) - Underscore

_ _ 관련 질문

69

goranikin

작성한 질문수 5

0

해당 강의와 파이썬 클린 코드 책을 병행해서 공부하는 중입니다.

 

파이썬 클린 코드 책에 따르면, 클래스 내 변수를 접근하지 못하게 할 때, _ 를 써서 접근을 하지 말라는 의도를 담으라 되어있습니다. 그리고 _ _의 경우에는 클래스의 상속 과정에서 네이밍이 겹치는 걸 방지하기 위해 만들어져있다고 되어있구요.

 

여기서 중요한 건, _ _ 의 경우 이름 변경을 통해 접근을 의도적으로 막는 것으로 설계되지 않았다는 점입니다. 애초에 영상에서도 보여주셨듯 클래스를 사용하는 입장에서 굳이 _ 를 써서까지 private variable에 접근할 이유가 없고, 만약 그럴 의도가 있다면 _ _로 숨겼다 해도 접근 자체는 가능하니까요. 따라서 이 부분이 pythonic 하지 않다... 라고 책에서 나와있네요. 사소한 차이일 수 있겠으나 파이썬에서 기능 개발의 의도를 오해할 수도 있을 것 같아 글 남깁니다.

python

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. goranikin님, 파이썬에서 변수 이름 앞에 ‘__’ (앞밑줄 두 개)를 붙이는 것이 어떤 의미를 가지는지에 대해 궁금증을 가지셨군요. 이 부분은 파이썬의 접근 제어와 관련이 깊습니다.

파이썬에서는 ‘__‘를 클래스 내부 변수 이름 앞에 사용하면, ‘name mangling(이름 맹글링)‘이라고 하여 클래스 이름과 결합된 형태로 바뀌게 됩니다. 이는 기본적으로 네임스페이스 충돌을 방지하며, 외부에서 직접 접근하지 않도록 의도적으로 사용됩니다. 하지만 이것이 완전히 보호되는 것은 아닙니다. ‘파이썬은 상당히 개방적(open)인 언어이므로, 의도적으로 접근하려면 여전히 가능합니다.

또한, ‘_‘로 시작하는 경우는 암묵적으로 ‘이 부분은 프라이빗한 것이다.’ 라고 나타내지만, 기술적으로나 강제적으로 제한을 두지는 않습니다. 개발자 사이에 관례적인 약속으로 이해하면 됩니다.

관련하여 더 깊은 이해를 도와드릴 수 있는 자료로서 아래 링크를 참고해 보세요:

이러한 네이밍 규약은 협업 시 코드의 안전성과 가독성을 높이는 데 중요한 역할을 하니 차이를 잘 이해하고 활용하시는 것이 좋습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

강의자료가 모두 동일한 PPT 입니다. 잘못 등록된것 같습니다.

0

56

2

나만의 패키지 만들기(1) 강의 결과물에서 이미지가 겹치는 문제는 다음과 같이 수정할 수 있을 것 같습니다

0

72

2

메타클래스 오류가 납니다

0

75

2

변수 앞 _ 하나를 사용할때

0

141

2

가상환경 설정 시 vscode 실행 오류

0

499

2

이미지 에러 발생

0

318

1

에러발생합니다2

0

258

1

Error발생합니다1

0

285

1

pypi 배포 중 에러 발생

0

531

2

강의 부분이 틀렸네요. 수정 요청드려요!

0

467

2

logging print 순서에 대한 질문입니다.

0

270

1

@contextlib.contextmanager 어노테이션, 데코레이터

0

282

1

mount라는 의미가 정확히 무엇인지 모르겠습니다.

0

488

1

파이썬 lv3 의 py_ad_4_2.py 에서 Image를 열기만 하고 닫지는 않으셨습니다.

0

341

1

오픈소스참여-나만의 패키지 만들기

1

499

3

gitignore 파일이 없어요

0

318

1

property 사용시 동명의 속성이 이미 존재하면 어떻게 되나요?

0

269

1

variable scope 강의 Ex8 질문드립니다.

0

351

1

오픈소스참여-나만의 패키지 만들기(1)

1

567

2

s1, s2 점수 확인

0

459

2

질문

0

265

2

descriptor 변수 공유문제

0

279

1

multipledispatch 에러

0

390

1

Ex6과 Ex7 관련

0

219

1