클래스 프라이빗(Private) 변수 사용법
프라이빗 변수(Private Variables)는 클래스 내부에서만 접근할 수 있는 특별한 변수입니다.
이 변수는 객체의 중요한 데이터를 외부에서 직접 바꾸지 못하도록 보호하며, 앞서 배운 캡슐화를 구현하는 데 사용됩니다.
파이썬에서는 변수 이름 앞에 밑줄 2개(__)를 붙여 프라이빗 변수를 나타냅니다.
참고: 밑줄을 1개만 붙인 변수는
보호 변수(Protected Variables)로, 해당 클래스와 하위 클래스에서만 접근할 수 있도록 설계된 변수입니다. 프라이빗 변수와 달리 외부에서 접근이 가능하지만 이러한 방식은 권장되지 않습니다.
class MyClass:
    def __init__(self):
        # 프라이빗 변수
        self.__private_var = 10
    # 프라이빗 변수 값을 반환하는 메서드
    def get_private_var(self):
        return self.__private_var
obj = MyClass()
print(obj.get_private_var())
# 10 출력
# print(obj.__private_var)
# AttributeError 발생: 직접 접근 불가
위 코드에서 __private_var는 MyClass 클래스의 프라이빗 변수입니다.
클래스 외부에서 obj.__private_var()와 같이 __private_var에 직접 접근하려고 하면 AttributeError가 발생합니다.
이와 같이 프라이빗 변수는 변수를 클래스 내부 및 메서드로만 접근할 수 있도록 제한하여, 객체의 정보를 안전하게 보호합니다.
프라이빗 변수의 특징
프라이빗 변수는 다음과 같은 특징을 갖습니다.
- 
데이터 보호: 클래스 내부에서만 변수에 접근할 수 있으므로, 외부에서 데이터를 잘못 수정하거나 읽는 것을 막아줍니다.
- 
사용하기 편리한 메서드 제공: 변수를 안전하게 다루기 위해 클래스에서 미리 만들어둔 메서드만 사용하도록 합니다.
class Account:
    def __init__(self, balance):
        # 프라이빗 변수
        self.__balance = balance
    def deposit(self, amount):
        if amount > 0:
            self.__balance += amount
            return f"입금 완료: 잔액 {self.__balance}원"
        return "입금 금액이 유효하지 않습니다."
    def get_balance(self):
        return f"현재 잔액: {self.__balance}원"
# 클래 스 사용 예시
account = Account(10000)
print(account.deposit(5000))
# '입금 완료: 잔액 15000원' 출력
print(account.get_balance())
# '현재 잔액: 15000원' 출력
# 프라이빗 변수 직접 접근 시도 (오류 발생)
# print(account.__balance)
# AttributeError 발생
이 예제에서 __balance는 Account 클래스의 프라이빗 변수입니다.
클래스 외부에서 __balance에 직접 접근하려 하면 AttributeError 오류가 발생합니다.
대신 클래스에서 제공하는 deposit과 get_balance 메서드를 통해 이 변수  의 값을 안전하게 바꾸거나 확인할 수 있습니다.
다음 내용이 궁금하다면?
코드프렌즈 PLUS 멤버십 가입 or 강의를 등록해 주세요!