15. 객체와 변수
1. 공부한 내용
1) 객체 프로그래밍에서의 인스턴스 변수에 대한 이해를 높힘
2) 외부에서 인스턴스 변수에 접근하는 방법(=속성)과 접근 불가능하게 하는 방법 습득
2. 실습 내용
No | 입력 코드 | 결과 | 중요한 부분 |
1 | 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 |