실제 구현 내용 일부를 외부에 감추어 은닉함
변수를 불변형으로 만들면 동시성 프로그래밍(멀티스레드처럼 복잡할 때)일 때의 문제(잘못된 값을 주입할 가능성과 변수의 값을 언제 바꿨는지 모를 때 등등)를 많이 해결 할 수 있음
__변수 = 프라이빗 변수
_변수 = 암묵적 캡슐화
사실 인터넷에 있는 여러 파이썬 코드를 보시면
self.__반지름이 아니라
self._반지름으로 언더바를 하나만 붙인 코드도 많이 볼 수 있습니다.
이는 "암묵적 캡슐화"라고 부릅니다.
파이썬은 기본적으로 개발자들끼리
"이름 앞에 _가 붙어 있는 것은, 클래스 외부에서 만지지 않는다"라는
암묵적인 규칙이 있습니다.
그래서 이런 암묵적 규칙을 사용해서 캡슐화 하는 경우도 있습니다.
getter 위에는 @property, setter 위에는 @인스턴스변수.setter를 쓰면함수 사용이 아닌 일반 변수를 쓰는것처럼 조회, 변경할 수 있음.
# 캡슐화
# 객체를 사용하는 사람이 허튼짓 못하게 변수와 함수를 숨기는 작업
# 인스턴스 변수와 인스턴스 함수 앞에 __를 붙이면
class Circle:
def __init__(self, 반지름):
if 반지름 < 0:
raise TypeError("반지름은 0 이상이어야 합니다.")
self.__반지름 = 반지름
self.__파이 = 3.14
@property
def 반지름(self):
return self.__반지름
@반지름.setter
def 반지름(self, value):
if value < 0:
raise TypeError("반지름은 0 이상이어야 합니다.")
self.__반지름 = value
@property
def 둘레(self):
return 2 * self.__파이 * self.__반지름
@property
def 넓이(self):
return self.__파이 * (self.__반지름 ** 2)
circle = Circle(10)
circle.반지름
circle.반지름 = -20
print(circle.둘레)
print(circle.넓이)