개발자 하고 싶다!!!

15. 객체와 변수

1_Python2019. 1. 19. 18:51

1. 공부한 내용

 1) 객체 프로그래밍에서의 인스턴스 변수에 대한 이해를 높힘

 2) 외부에서 인스턴스 변수에 접근하는 방법(=속성)과 접근 불가능하게 하는 방법 습득


2. 실습 내용 

 No

 입력 코드

결과 

 중요한 부분

class C(object):

    def __init__(self, v): 

        self.value = v

    def show(self):

        print(self.value)

    def setValue(self, v):

        self.value = v

    def getValue(self):

        return self.value


c1 = C(10)

print(c1.getValue())

c1.setValue(20)

print(c1.getValue())


10

20

1. set/get 변수 설정

 1) Python은 외부에서 <c1.value = 20> 방식으로 인스턴스 변수값을 

    변경하는 것과, <print(c1.value)> 방식으로 변수에 접근하는 게 가능

 2) 하지만 통념적으로는 읽을 때는 <get> 쓸 때는 <set>으로 함수를 

    지정하여 접근하는 것이 옳은 방식임

 3) 이렇게 외부에서 접근/변경이 가능한 값을 속성(Property)라고 함

 2

class Cal(object): 

    def __init__(self, v1, v2): 

        self.v1 = v1

        self.v2 = v2


    def add(self): 

        return self.v1 + self.v2

        

    def subtract(self):

        return self.v1 - self.v2


    def setV1(self, v1):

        if isinstance(v1, int):                           

            self.v1 = v1

            

    def getV1(self):

        return self.v1


c1 = Cal(10,10)

print(c1.add())

print(c1.subtract())

c1.setV1('one')

c1.setV1(20)

print(c1.add())

print(c1.getV1())

20

0

30

20

1. get/set 함수를 사용하는 이유

 1) 통념적인 이유 뿐만 아니라 인스턴스 변수를 단순히 <c1.value = 20> 

    로 변경할 경우 입력값에 대한 Data type(문자열인지, 정수인지)을 

    확인할 수 없으므로 실수로 잘못 입력하면 오류 발생 가능성 있음

 3) 따라서 set 함수에 <if isinstance(v1, int)>를 사용하여 set 함수에 

    들어간 값이 정수(int)인 경우에만 인스턴스 변수를 변경할 수 있도록

    조건 설정이 가능함 (그 외 함수 활용 가능!)

 4) 이렇게 설정할 경우 <c1.setV1('one')>를 추가해도 값이 문자열이기 

    때문에 무시


 3

class C(object):

    def __init__(self, v): 

        self.__value = v 

    def getValue(self):

        print(self.__value)


c1 = C(10)

print(c1.__value) <- 출력 안 됨

c1.getValue()

(<print(c1.__value)> 무시됨)

10 (c1.show()에 대한 결과)

1. 외부에서 인스턴스 변수에 접근할 수 없게 하는 방법

 1) Python은 기본적으로 인스턴스 변수에 접근 가능하기 때문에

    필요에 따라 접근 불가능하게 막을 수 있음

 2) 특히 class 내부에서만 활용하는 변수인 경우, 변수값에 < __ >를 추가

    하여 외부에서 접근/변경이 불가능하게 할 수 있음

 3) 따라서 외부에서 접근/변경 하려면 반드시 메소드를 통해서만 가능

    <print(c1.__value)> 는 출력 안 됨, <c1.getValue()> 는 출력됨


4. 궁금점/감상

 1) 인스턴스 변수에 대한 확고한 정의, 이해가 필요함! (다행히 아직까지 90% 이상은 이해하고 있음...ㅎㅎ)



'1_Python' 카테고리의 다른 글

14. 객체 (Class) / 객체 지향 프로그래밍  (0) 2019.01.13
13. 모듈 (Module)  (0) 2019.01.12
12. 함수  (0) 2019.01.06
11. 컨테이너와 반복문  (0) 2019.01.03
10. 반복문  (0) 2018.12.15