Python

PYTHON - 클래스 고급(Chapter 8-46. 프라이빗 변수)

Chansman 2025. 3. 17. 14:26

📚 Chapter 8-46. 프라이빗 변수

1️⃣ 프라이빗 변수의 개념

  • 프라이빗 변수는 클래스 내부에서만 접근할 수 있도록 제한된 변수입니다.
  • 변수명 앞에 __ (언더스코어 두 개)를 붙이면 프라이빗 변수로 설정됩니다.
  • 이는 데이터 보호직접적인 수정 방지를 위해 사용됩니다.

2️⃣ 일반 변수 사용 시 문제점

import math

class OzCircle:
    def __init__(self, radius):
        self.radius = radius  # 일반 변수로 반지름 값을 초기화

    def get_circumference(self):
        return 2 * math.pi * self.radius  # 둘레 계산

    def get_area(self):
        return math.pi * (self.radius ** 2)  # 넓이 계산

circle = OzCircle(10)

# 외부에서 변수 값을 직접 변경
circle.radius = -2

print("원의 둘레:", circle.get_circumference())
print("원의 넓이:", circle.get_area())

📋 출력 결과

원의 둘레: -12.566370614359172
원의 넓이: 12.566370614359172
  • 문제점: 외부에서 잘못된 값(-2)으로 변경해도 프로그램이 이를 막지 못해, 논리적으로 잘못된 결과가 발생합니다.

3️⃣ 프라이빗 변수로 보호하기

import math

class OzCircle:
    def __init__(self, radius):
        self.__radius = radius  # 프라이빗 변수로 설정

    def get_circumference(self):
        return 2 * math.pi * self.__radius

    def get_area(self):
        return math.pi * (self.__radius ** 2)

circle = OzCircle(10)

# 프라이빗 변수는 직접 접근이 불가
circle.radius = -2  # 이는 __radius가 아닌 새로운 변수 radius를 추가하는 것

print("원의 둘레:", circle.get_circumference())
print("원의 넓이:", circle.get_area())

📋 출력 결과

원의 둘레: 62.83185307179586
원의 넓이: 314.1592653589793
  • 포인트: __radius는 외부에서 접근할 수 없기 때문에, circle.radius = -2는 영향을 미치지 않습니다.
  • 보호된 데이터: 프로그램이 논리적 오류를 방지하고, 데이터 일관성을 유지할 수 있게 됩니다.

✅ 이해도 체크리스트

  1. 프라이빗 변수란 무엇인가요?
    • 정답: 클래스 내부에서만 접근이 가능한 변수로, 변수명 앞에 __를 붙여 정의합니다.
    • 설명: 이는 외부에서 실수로 잘못된 값이 할당되는 것을 방지하고, 데이터 보호를 강화합니다.
  2. 프라이빗 변수의 사용 목적은 무엇인가요?
    • 정답: 객체의 데이터 보호와 잘못된 데이터 변경 방지
    • 설명: 프로그램이 논리적 오류를 방지하고, 외부에서 변수 값을 임의로 변경하지 못하도록 보호합니다.
  3. 프라이빗 변수에 외부에서 접근하려고 하면 어떻게 되나요?
    • 정답: 접근할 수 없으며, 새로운 변수가 생성될 뿐 기존의 프라이빗 변수는 유지됩니다.
    • 설명: 예제에서 circle.radius = -2__radius가 아닌 새로운 radius 변수를 생성합니다.
  4. 프라이빗 변수는 어떻게 선언하나요?
    • 정답: 변수 이름 앞에 __를 붙여 선언합니다. (self.__radius = 값)
    • 설명: 이를 통해 변수는 클래스 내부에서만 접근이 가능하게 됩니다.
  5. 프라이빗 변수의 값을 외부에서 변경하려면 어떻게 해야 하나요?
    • 정답: 클래스 내부에 getter와 setter 메서드를 정의하여 값을 변경하도록 처리합니다.
    • 설명: 이는 데이터를 안전하게 보호하면서도, 필요한 경우에는 변경이 가능하도록 하기 위한 방식입니다.