반응형
캡슐화

  - 객체를 사용하는 사람이 함부로 사용 못하게 변수와 함수를 숨기는 작업입니다.

  - 인스턴스 변수와 인스턴스 함수 앞에 __ 를 붙이면 된다.

 

[ 파이썬 -  클래스 캡슐화 ] 원의 반지름을 입력해서 둘레와 넓이를 구하는 프로그램입니다.

class Circle:
    def __init__(self, 반지름):
        self.반지름 = 반지름
        self.파이 = 3.14
    def 둘레(self):
        return 2 * self.파이 *self.반지름

    def 넓이(self):
        return 3.14 * (self.반지름 **2)
    
circle = Circle(10)
print(circle.둘레())
print(circle.넓이())

▶  만약, 사용자가 반지름을 음수(-)로 입력한다면?

class Circle:
    def __init__(self, 반지름):
        if 반지름 < 0:                 ########
            raise TypeError("반지름은 0 이상이어야 합니다.")
        
        self.반지름 = 반지름
        self.파이 = 3.14
    def 둘레(self):
        return 2 * self.파이 *self.반지름

    def 넓이(self):
        return 3.14 * (self.반지름 **2)
    
circle = Circle(10)
print(circle.둘레())
print(circle.넓이())

▶ 만약, 강제로 반지름 값을 음수로 변경해 버린다면?

class Circle:
    def __init__(self, 반지름):
        if 반지름 < 0:
            raise TypeError("반지름은 0 이상이어야 합니다.")
        
        self.반지름 = 반지름
        self.파이 = 3.14
    def 둘레(self):
        return 2 * self.파이 *self.반지름

    def 넓이(self):
        return 3.14 * (self.반지름 **2)
    
circle = Circle(10)
circle.반지름 = -10     ###########
print(circle.둘레())
print(circle.넓이())

 

[ 해결 방법 - 캡슐화 ] 변수명앞에 __ 를 붙이면 외부에서 값을 변경할수 없습니다.

class Circle:
    def __init__(self, 반지름):
        if 반지름 < 0:
            raise TypeError("반지름은 0 이상이어야 합니다.")
        
        self.__반지름 = 반지름
        self.__파이 = 3.14
    def 둘레(self):
        return 2 * self.__파이 *self.__반지름

    def 넓이(self):
        return self.__파이 * (self.__반지름 **2)
    
circle = Circle(10)
circle.__반지름 = -10       ## 
print(circle.둘레())
print(circle.넓이())

 

반응형
Posted by 명문코딩컴퓨터
,