본문 바로가기
대학원 공부/computer science

Python : basic : public, protected, private

by 월곡동로봇팔 2019. 12. 1.
class Student :
    name = '박상진' 

    def getName (self):
        return self.name

    def setName(self, name):
        self.name = name
        
man = Student()

 

이런 클래스가 있다고 가정하자.

 

여기서 Student의 name 변수는 박상진, man이라는 객체의 name 변수는 유혁준이다.

 

만약 악의가 있는 사람이 Student라는 class의 변수 name을 임의로 수정할 경우, Student.name = 'devil'

 

Student class를 써야하는 사람들은 name이 박상진으로 되야하지만, devil로 바뀌어 오류가 날 수도 있다.

 

 

이를 막기위해 private 변수 및 get-, set- 함수가 필요한 것이다.

class Student :
    name = '박상진' 

    def getName (self):
        return self.name

    def setName(self, name):
        self.name = name
        
 
 
man = Student()
print(man.getName())
# 박상진

man.setName('강형구')
print(man.getName())
# 강형구

man2 = Student()
print(man2.getName())
# 박상진

위처럼 내가 class 라는 틀에서 객체를 생성한 후, 객체의 변수를 수정하고 싶은 경우에는, set을 

객체의 변수를 가져오고 싶은 경우에는 get을 써서 Student라는 class 틀의 무결성을 지켜야 한다.

 

 

위의 코드는 아래 코드와는 다르게, Student class 변수 name으로 바로 접근이 가능하다.

Student.name = '조재엽' 이라면 이는 class의 name 변수가 바뀌게 될 것이다.

class Student :
    __name = '박상진' 

    def getName (self):
        return self.__name

    def setName(self, __name):
        self.__name = __name
        
 
 
man = Student()
print(man.getName())
# 박상진

man.setName('강형구')
print(man.getName())
# 강형구

man2 = Student()
print(man2.getName())
# 박상진

Student의 name변수를 바꾸지 못하게, 위의 코드를 보완한 코드이며, 실행하면 이러한 결과가 나온다.

즉 private을 뜻하는 __name을 해줌으로써 print(man.__name)을 해도 오류가 난다.

이는 private한 변수이기 때문이다.

 

private 한 변수를 바꿔서 쓰고싶다면, 우리는 getName, setName이라는 함수를 이용해서 사용해, 변수의 무결성을 추구한다.

이말은 우리가 변수를 바꿔서 객체안에서 사용해도, class 안에서는 변함이 없기 때문에, 무결성이 존중된다는 것을 의미한다.

 

또한 만약 변수가 바뀐다 하더라도, setName, getName을 통해 변수를 불러왔으니, 우리는 이 경로를 통해서만

변수 변경이 일어났다는 것을 알 수 있기 때문에, 디버깅할 때도 편리하다.

 

즉! class는 객체를 만드는 틀이기 때문에, 정보가 변경되서는 안 된다!!!!

 

 

 

사실 python 에서는 잘 쓰지않는 개념이긴하지만, 그래도 알아두면 좋을 것 같다.

python에서는 Class 안에 보통 변수를 잘 지정하지 않기 때문이다.

'대학원 공부 > computer science' 카테고리의 다른 글

Computer Structure : computer 요소  (0) 2019.12.02
Open Source : Visual Studio Code 단축키  (0) 2019.12.01
Python : Basic : Class 기초  (0) 2019.12.01
Linux : Duckdns  (0) 2019.11.26
Linux : Google API 써보기  (0) 2019.11.26

댓글