본문 바로가기
파이썬

파이썬(python) 강의 10장 - 객체와 변수(데이터) -

by ChocoPeanut 2017. 5. 29.

파이썬(python) 강의 10

- 객체와 변수(데이터) -

 

파이썬의 class를 사용하여 객체를 쓰게 되면 유용한 듯 보이지만 하나의 큰 문제를 발견할 수 있다. 그건 바로 하나의 class로 선언된 객체의 변수를 밖에서 마음껏 바꿀 수 있다는 것이다. 이게 왜 문제가 되는지 궁금할 수도 있다. 그래서 이에 대해 설명을 하고 이를 방지할 수 있는 방법을 설명하고자 한다.


변수는 매우 중요한 자료이다. 모듈을 사용하지 않고 class를 이용하여 객체를 만드는 이유 중 하나가 함수는 같은데 변수를 다양하게 사용하기 위해서 이다. 그러므로 변수는 객체를 구성하는 종류에서 매우 중요하다고 할 수 있다. 그런데 우리가 지정해주지 않았는데도 class 외부 즉 객체가 지정해주는 값 이외에 다른 임의의 값이 들어오게 되면 매우 큰 문제가 발생한다. 앞의 계산기 예시를 사용하여 보게 되면 add값에는 정확한 변수인 1010이 들어가게 되지만 이후에 외부에서 c1v1에 대한 변수 값을 임의로 20으로 바꾸게 되면 우리가 처음에 만든 의도와 다른 결과 값을 나타나게 된다.



이를 없애기 위해서 파이썬에서 class 내부의 변수를 나타낼 때에는 __를 먼저 입력한 후 변수를 선언하게 된다. 그렇게 되면 이에 대한 값은 내부에서만 변경시킬 수 있고 외부에서는 접근을 할 수 없게 된다. 따라서 외부에서 v1에 대한 입력을 바꾸려고 시도해도 무시되고 원래 생성자에 있던 값으로 진행하여 의도했던 결과 값을 얻을 수 있게 되는 것이다.



그러면 우리가 임의로 바꾸고 싶을 때는 어떻게 해야 할까? 앞의 방법을 사용하지 않고 외부에서 마음껏 접근을 하게 되면 큰 문제가 발생하므로 우리는 함수를 통해서 변수를 바꿀 수 있도록 접근을 돌려서 할 필요가 있다. 이러한 방법에 사용되는 함수가 getset 함수이다. 말 그대로 get은 변수의 값을 불러올 수 있는 함수이고 set 함수는 임의의 다른 값을 변수에 지정할 수 있게 해주는 함수이다. 우리는 이러한 getset 함수를 통해서만 변수에 접근을 할 수 있게 되어 변수를 잘 보호할 수 있게 된다. 변수가 다른 곳에서 변경되지 못하게 하여 큰 문제를 발생하는 것을 막고 임의로 특정 함수를 불렀을 때만 변경하도록 만드는 것이다.