정리노트

[파이썬/python] [클래스] private 변수 / 접근자와 설정자 본문

프로그래밍/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