반응형
🔍 두 코드(mangling1.py vs mangling2.py)의 차이점
![]() |
![]() |
두 코드의 차이는 인스턴스 변수의 네이밍 방식에 있습니다.
파일명 속성 선언 방식 속성 접근 방식 실행 결과
mangling1.py | self.price (공개 속성) | x.price | 정상 실행 |
mangling2.py | self._price (보호된 속성) | x._price | 정상 실행 |
✅ 1. mangling1.py: 공개(public) 속성 사용
class Food:
def __init__(self, name, price):
self.name = name
self.price = price # ✅ 일반적인 속성 (공개 속성)
def show(self):
print(self.name, self.price)
x = Food('milk', 1500)
x.price //= 2 # ✅ 직접 접근 가능
x.show()
✔️ 특징
- self.price는 **공개 속성(public attribute)**이므로, 객체에서 직접 접근 가능.
- x.price //= 2를 통해 속성 값을 바로 수정 가능.
- 일반적으로 속성을 외부에서 접근할 수 있도록 공개할 때 사용.
✅ 출력 결과
milk 750
✅ 2. mangling2.py: 보호(protected) 속성 사용
class Food:
def __init__(self, name, price):
self.name = name
self._price = price # ✅ 보호된 속성 (Protected attribute)
def show(self):
print(self.name, self._price)
x = Food('milk', 1500)
x._price //= 2 # ✅ 여전히 접근 가능하지만, 원칙적으로 권장되지 않음
x.show()
✔️ 특징
- self._price는 보호(protected) 속성으로, 변수명 앞에 _(언더스코어)를 추가하여 나타냄.
- 보호 속성은 외부에서 직접 접근하는 것을 권장하지 않지만, 접근 자체는 가능.
- 즉, x._price //= 2는 동작하지만, "이 속성은 내부적으로만 사용해야 한다"는 의미.
✅ 출력 결과
milk 750
🔥 📌 두 코드의 차이점 정리
비교 항목 mangling1.py (price) mangling2.py (_price)
속성 타입 | 공개(Public) 속성 | 보호(Protected) 속성 |
네이밍 방식 | self.price | self._price |
접근 가능 여부 | 외부에서 자유롭게 접근 가능 (x.price) | 외부에서 접근 가능하지만 권장되지 않음 (x._price) |
속성 수정 가능 여부 | 가능 (x.price //= 2) | 가능하지만 내부적으로만 수정해야 함 (x._price //= 2) |
🚀 언제 _price(보호 속성)를 사용할까?
- 개발자가 "이 속성은 내부적으로만 사용해야 한다"는 의도를 명확히 표현할 때
- 외부에서 직접 수정하지 않고, 특정 메서드를 통해 접근하도록 유도할 때
class Food: def __init__(self, name, price): self.name = name self._price = price # 내부적으로만 사용해야 하는 속성 def get_price(self): return self._price def set_price(self, new_price): if new_price > 0: self._price = new_price else: print("가격은 0보다 커야 합니다!") x = Food('milk', 1500) print(x.get_price()) # ✅ 1500 (getter 사용) x.set_price(1000) # ✅ setter 사용하여 가격 변경 print(x.get_price()) # ✅ 1000
🏆 결론
- mangling1.py: self.price(공개 속성) → 외부에서 자유롭게 접근 가능
- mangling2.py: self._price(보호 속성) → 외부에서 접근 가능하지만, 직접 수정하는 것은 권장되지 않음
- Python에서는 _price와 같이 변수명 앞에 _를 붙이면 보호 속성을 의미하며, 원칙적으로 내부에서만 사용해야 함.
즉, "외부에서 값을 직접 변경해도 되는가?"에 따라 price(공개)와 _price(보호)를 선택하면 됩니다! 😊🚀
'십대를 위한 코딩 > 십대를 위한 파이썬' 카테고리의 다른 글
파이썬의 철학 (0) | 2025.02.22 |
---|---|
기반 클래스(Base Class)와 파생 클래스(Derived Class) (1) | 2025.02.21 |
VS Code에서 Python 확장(extension) 설치에 대한 설명 (0) | 2025.02.19 |
파이썬 딕셔너리(Dictionary) 메서드 정리 (0) | 2025.02.18 |
딕셔너리의 .items() 메서드는 어떻게 생겼을까? (1) | 2025.02.17 |