<aside> 💡 값을 반환하거나 저장하는 메소드를 마치 속성처럼 간편하게 사용할 수 있도록 하는 기능입니다. 특정 속성값의 반환과 저장 방식을 제어하는 역할도 합니다.

</aside>

class Circle:
    def __init__(self, radius):
        self._radius = radius

    @property
    def radius(self):
        return self._radius

    @radius.setter
    def radius(self, value):
        if value >= 0:
            self._radius = value
        else:
            print("반지름은 음수가 될 수 없습니다.")

    @property
    def diameter(self):
        return self._radius * 2

    @property
    def area(self):
        return 3.14 * self._radius ** 2
circle_1 = Circle(3)

circle_1_rad = circle_1.radius

circle_1.radius = 5  # 🔴
circle_1.radius = -2

circle_1_diameter = circle_1.diameter
circle_1_area = circle_1.area

특정 속성을 바꾸지 않도록

class YalcoChicken:
    company_name = "얄코치킨"
    # 다음에 오픈할 매장의 번호
    next_no = 1

    def __init__(self, name):
        self._no = YalcoChicken.next_no
        self.name = name
        YalcoChicken.next_no += 1

    def intro(self):
        return f"안녕하세요, {YalcoChicken.company_name} {self.no}호 {self.name}점입니다!"

    @property
    def no(self):
        return str(self._no) + "번 매장"

    @no.setter
    def no(self, value):
        raise AttributeError("매장 번호는 바꾸지 않습니다.")
        # Error는 이후 배울 것

store_1 = YalcoChicken("강남")
store_2 = YalcoChicken("판교")

store_1_no = store_1._no
store_2_no_a = store_2.no

# 💡 오류를 발생시킴
# store_2.no = 3

# 속성에 직접 접근하여 바꾸는 것은 막지 못함
# store_2._no = 3
# store_2_no_c = store_2.no

pass
class Person:
    def __init__(self, age):
        self.age = age

    @property
    def korean_age(self):
        return self.age + 1

    @korean_age.setter
    def korean_age(self, kr_age):
        self.age = kr_age - 1

person_1 = Person(17)
per_1_age_a = person_1.age
per_1_kor_age_a = person_1.korean_age

person_1.korean_age = 20
per_1_age_b = person_1.age
per_1_kor_age_b = person_1.korean_age

pass
class Employee:
    def __init__(self, name, age):
        self._name = name
        self._age = age

    @property
    def name(self):
        return self._name[0] + '모씨'

    @property
    def age(self):
        return str(self._age - (self._age % 10)) + '대'

    @age.setter
    def age(self, age):
        if isinstance(age, int) and age > 0:
            self._age = age

    def get_older(self, years):
        self._age += years

emp_1 = Employee('김복동', 22)

emp_1_name = emp_1.name
emp_1_age_a = emp_1.age

emp_1.get_older(12)
emp_1_age_b = emp_1.age

emp_1.age = 0
emp_1_age_c = emp_1.age

pass

💡 컴퓨터 자원 절약에 활용