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