프로그래밍/Python
[파이썬/python] [클래스] private 변수 / 접근자와 설정자
Rolen
2022. 9. 28. 00:32
클래스의 인스턴스 변수를 private 변수로 지정하지 않으면
인스턴스 변수를 외부에서 올바르지 않게 변경할 수 있다.
그래서 변수를 선언할 때 private 변수로 만들어 외부로부터의 접근을 차단할 수 있다.(정보은닉)
추후, 해당 class의 정보에서 age가 아닌 birthday를 저장하기로 정책이 바뀌어서
바꾸려 할 때 class 외부에서 age를 사용하고 있었다면 변경이 불가능해진다.
class Student:
def __init__(self, name = None, age = 0):
self.name = name # 일반 인스턴스 변수 선언
self.__age = age # private 변수 선언 (변수의 이름 앞에 언더바(_)를 두 개 붙임
obj = Student()
print(obj.name) // None
print(obj.__age) // 에러 발생
obj = Student("rolen", 10)
print(obj.name) // rolen
print(obj.__age) // 에러 발생
=============================================================================
class Student:
def __init__(self, name = None, birth = "2022"): # age를 문자열 값을 받는 birth로 교체
self.name = name
self.birth = birth
obj = Student("rolen", 10)
obj.age = 20
print(obj.birth)
// 디폴트로 지정한 "2022"가 아닌 이전 실행에 저장됐던 데이터 10 이 출력된다.
print(obj.age)
// 출력: 20 // 에러는 발생하지 않음
하지만, 정보를 은닉해두고 사용한다면
클래스 내부의 변수 값이 필요해도 접근할 수 없다.
이 경우에는
인스턴스 변수값을 반환하는 '접근자' 와 // 대개 get
인스턴스 변수값을 설정하는 '설정자'를 만든다 // set 을 메소드 이름 앞에 붙인다
def getName(self):
return self.__name
def getAge(self):
return self.__age
def setName(self, name):
self.__name=name
def setAge(self, age):
self.__age=age
728x90