혼공파 82강
1. 캡슐화
# 캡슐화
# 객체를 사용하는 사람이 허튼짓 못하게 변수와 함수를 숨기는 작업
# 인스턴스 변수와 인스턴스 함수 앞에 __를 붙이면 외부에서 접근 불가
# 외부에서 변수 확인하지도 바꾸지도 못하게 만들기 때문에 get/set 함수를 만들어서
# 사용할 수 있게 해주는 것!! 필요에 따라 추가한다 (getter, setter)
class Circle:
def __init__(self, 반지름):
if 반지름 < 0:
raise TypeError("반지름은 0 이상이어야 합니다.")
self.__반지름 = 반지름
self.__파이 = 3.14
def get_반지름(self):
return self.__반지름
def set_반지름(self, value):
if value < 0:
raise TypeError("반지름은 0 이상이어야 합니다.")
self.__반지름 = value
def 둘레(self):
return 2 * self.__파이 * self.__반지름
def 넓이(self):
return self.__파이 * (self.__반지름 ** 2)
circle = Circle(10)
# circle.반지름 = -10 이런 행위 자체를 못하게 막아야 한다
print(circle.get_반지름())
circle.set_반지름(20)
print(circle.둘레()) # 둘레를 구함
print(circle.넓이()) # 넓이를 구함
# setter 같은 함수들이 비파괴적으로 동작해야한다
# (1) 스택에 있는 서로 다른 이름들이 힙에 있는 하나의 객체를 가리키면 어떤 변수가 어떤 값을 변경하는지 추적하기 어렵기 때문에 버그가 발생하면 여러부분을 확인해야 한다.
# (2) 비파괴적으로 동작해야 동시성 프로그래밍과 관련된 많은 문제를 해소할 수 있다.
# 변수와 값을 함수로 말고 본질 그대로 사용할 수 있게 하자
# 메서드에 @property 를 붙여서 사용(그 때 마다 구글링으로 뭘 붙여야하는 지 찾아볼 것)
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.넓이) # 넓이를 구함
'Base > Python' 카테고리의 다른 글
28. 컴포지션으로 스택(Stack)과 큐(Queue) 구현 (0) | 2023.06.30 |
---|---|
27. 상속(Inheritance)과 컴포지션(Composition) (0) | 2023.06.30 |
25. 특수한 이름의 함수, 값 객체 (0) | 2023.06.29 |
24. 클래스 문법 기본 (0) | 2023.04.20 |
23. 객체지향 프로그래밍 (0) | 2023.04.20 |
댓글