키워드 : 은닉화 (객체의 속성과 행위를 하나로 묶고, 구현된 일부를 감추어 은닉)
property, getter, setter은 클래스 인스턴스의 내부에서 데이터를 안전하게 접근하기 위해 사용하는 키워드이며, 객체지향 프로그래밍에서 흔히 볼수 있는 패턴이다.
- getter : 데이터를 읽어주는 메서드
- setter : 데이터를 변경해주는 메서드
⇒ 파이썬의 내장 함수는 property() 메서드를 사용하면 깔끔하게 getter, setter 메서드를 호출할 수 있으며, 여기서 내장 데코레이터인 '@property'를 활용할 수 있다.
[property]
: 인스턴스 변수 값을 사용해서 적절한 값으로 보낼 때
: 인스턴스 변수 값에 대한 유효성 검사 및 수정
예제
__변수명 : 클래스 인스턴스 내부에서만 접근할 수 있음
setter을 정의할 때는 데코레이터 property을 통해 정의한 메서드인 get_age를 적어주고 .setter를 덧붙이면 된다.
setter 메서드 : '@<필드명>.setter
이를 통해 내부에서만 접근할 수 있는 은닉 환경이 형성된다.
class Car:
"""
Car Class
"""
__count = 0
def __init__(self, name, age):
self.__name = name # 클래스 인스턴스 내부에서만 접근이 가능한 변수
self.__age = age
Car.__count += 1
@property
def get_name(self):
return f"Hyundai {self.__name}"
@property
def get_age(self):
return self.__age
@get_age.setter
def set_age(self, new_age):
if new_age < 0:
raise ValueError("Invalid age")
else:
self.__age = new_age
my_car = Car("Nyyang", 10)
# print(my_car.age) # AttributeError: 'Car' object has no attribute 'age'
print(my_car.get_name)
print(my_car.get_age)
# my_car.set_age = -20 # ValueError: Invalid age
my_car.set_age = 20
print(my_car.get_age)
# 출력
Hyundai Nyyang
10
20
간단 정리
클래스는 설계도이다. 이 설계도를 통해 각각의 인스턴스들을 생성할 수 있다.
a = Bike()
b = Bike()
..
이렇게 클래스로부터 인스턴스를 생성한 이후, 클래스 인스턴스 내부에서 데이터를 안전하게 접근하기 위해서는 Getter, Setter을 사용하는게 OOP에서 관례이다.
왜냐하면, self.name = name, self.age = age 이런 식으로 정의를 하게 되면 외부에서 누구나 접근 가능하며 임의로 값을 수정할 수 있다.
고로, 안전하게 데이터에 접근 및 호출하기 위해 Getter, Setter 메서드를 사용하며, Property 데코레이터를 활용하는 것이 좋다.
'Programming > Python' 카테고리의 다른 글
[Boto3] RDS의 Parameter Group 값을 CSV 추출 스크립트 (0) | 2021.08.23 |
---|---|
[Python] Boto3로 Security Group rule 추가 (csv 파일 이용) (3) | 2021.08.14 |
[Python] Decorator 개념 간단히 알아보기 (0) | 2021.07.10 |
[Python] 정규 표현식 정리 #1 - 기초 (2) | 2021.07.08 |
[Python] 이터레이터, 제너레이터 개념 (0) | 2021.07.08 |