Python Property

Languages ๐Ÿ“œ ยท 10, 2026 at 19:52
ํ•จ์ˆ˜์ธ๋ฐ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์“ฐ๋Š” ๊ฒƒ

 

๋‚ด๋ถ€์— ๊ณ„์‚ฐ์ด๋‚˜ ๊ฒ€์ฆ ๋กœ์ง์„ ํฌํ•จ์‹œํ‚ค๊ณ  ์‹ถ์ง€๋งŒ, ์™ธ๋ถ€์—์„œ๋Š” ์ด๋ฅผ ๊ทธ์ € ๋‹จ์ˆœํ•œ attribute์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ์‹ถ์„ ๋•Œ property๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

c.f. ๋‹จ์ผ ์ ‘๊ทผ ์›์น™(Uniform Access Principle) : ๋‚ด๋ถ€ ๋กœ์ง์ด ๋‹จ์ˆœํ•œ ๋ณ€์ˆ˜์ธ์ง€, ๋ณต์žกํ•œ ํ•จ์ˆ˜ ๊ณ„์‚ฐ์ธ์ง€ ์‚ฌ์šฉ์ž๋Š” ์•Œ ํ•„์š” ์—†์ด ๋˜‘๊ฐ™์ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฐœ๋….

 

class Person:
	def __init__(self):
    	self._age = 20
        
    @property
    def age(self):
    	return self._age

p = Person()
print(p.age)

์‹ค์ œ๋กœ๋Š” ๋ฉ”์„œ๋“œ์ด์ง€๋งŒ attribute์ฒ˜๋Ÿผ ์ ‘๊ทผ ๊ฐ€๋Šฅ

๋‚ด๋ถ€์— ๋กœ์ง์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.

 

ํ™œ์šฉ ์˜ˆ์‹œ

1. ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ(Validation)

class Person:
    def __init__(self):
        self._age = 20

    @property
    def age(self):
        return self._age

    @age.setter
    def age(self, value):
        if value < 0:
            raise ValueError("๋‚˜์ด๋Š” ์Œ์ˆ˜ ๋ถˆ๊ฐ€")
        self._age = value

p = Person()
p.age = 10   # setter ์‹คํ–‰๋จ
class User:
    def __init__(self, name, age):
        self.name = name
        self.age = age  # ์—ฌ๊ธฐ์„œ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ setter๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค!

    # 1. Getter: ๊ฐ’์„ ์ฝ์„ ๋•Œ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜
    @property
    def age(self):
        return self._age

    # 2. Setter: ๊ฐ’์„ ํ• ๋‹นํ•  ๋•Œ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜
    @age.setter
    def age(self, value):
        if value < 0:
            raise ValueError("๋‚˜์ด๋Š” ์Œ์ˆ˜๊ฐ€ ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค!")
        self._age = value

# ์‚ฌ์šฉ ์˜ˆ์‹œ
user1 = User("ํŒŒ์ด์ฌ", 20)
print(user1.age)  # ์ถœ๋ ฅ: 20 (๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์ ‘๊ทผ)

# ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ ํ…Œ์ŠคํŠธ
try:
    user1.age = -5  # ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ๊ฐ’์„ ๋„ฃ์ง€๋งŒ, ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜์–ด ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ด!
except ValueError as e:
    print(f"์—๋Ÿฌ ๋ฐœ์ƒ: {e}")

 

 

2. ๋™์  ๊ณ„์‚ฐ (Computed Properties) 

  e.g. first_name๊ณผ last_name์ด๋ผ๋Š” ๋ณ€์ˆ˜๋งŒ ์ €์žฅํ•ด ๋‘๊ณ , full_name์„ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ๋‘ ๊ฐœ๋ฅผ ํ•ฉ์ณ์„œ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ. (๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋ฅผ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•)

class Person:
    def __init__(self, first_name, last_name):
        self.first_name = first_name
        self.last_name = last_name

    # ๋ณ„๋„์˜ ๋ณ€์ˆ˜๋กœ ์ €์žฅํ•˜์ง€ ์•Š๊ณ , ํ˜ธ์ถœ๋  ๋•Œ๋งˆ๋‹ค ๊ณ„์‚ฐํ•ด์„œ ๋ฐ˜ํ™˜!
    @property
    def full_name(self):
        return f"{self.first_name} {self.last_name}"

# ์‚ฌ์šฉ ์˜ˆ์‹œ
person = Person("๊ธธ๋™", "ํ™")

# 1. ํ•จ์ˆ˜ํ˜•ํƒœ์ธ full_name()์ด ์•„๋‹ˆ๋ผ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ full_name ์œผ๋กœ ํ˜ธ์ถœ
print(person.full_name)  # ์ถœ๋ ฅ: ๊ธธ๋™ ํ™

# 2. ์ด๋ฆ„์ด ๋ฐ”๋€Œ๋ฉด?
person.first_name = "์ฒ ์ˆ˜"

# 3. full_name๋„ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์คŒ!
print(person.full_name)  # ์ถœ๋ ฅ: ์ฒ ์ˆ˜ ํ™

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ๋ฉ”๋ชจ๋ฆฌ์— ๊ตณ์ด ์ €์žฅํ•  ํ•„์š” ์—†๋Š” ๊ฐ’๋“ค์„, ํ˜ธ์ถœํ•˜๋Š” ์ˆœ๊ฐ„์— ๊ณ„์‚ฐํ•ด์„œ ๋˜์ ธ์ฃผ๋Š” ํŒจํ„ด์ด๋‹ค.

 

full_name ์ด๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด์„œ ์ €์žฅํ•ด๋‘๋ฉด, first_name์ด ๋ฐ”๋€” ๋•Œ๋งˆ๋‹ค full_name๋„ ์—…๋ฐ์ดํŠธํ•ด ์ค˜์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€๊ณผ ๋ฒ„๊ทธ์˜ ์œ„ํ—˜์ด ์ƒ๊ธด๋‹ค. ํ•˜์ง€๋งŒ @property๋ฅผ ์“ฐ๋ฉด ๋ฉ”๋ชจ๋ฆฌ๋„ ์•„๋ผ๊ณ  ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ๋„ ์ง€ํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ, ์ด ์˜ˆ์ œ์—์„œ๋Š” setter๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— person.full_name = "๊น€์ฒ ์ˆ˜" ์ฒ˜๋Ÿผ ๊ฐ•์ œ๋กœ ๊ฐ’์„ ๋„ฃ์œผ๋ ค๊ณ  ํ•˜๋ฉด AttributeError๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ ์ฝ๊ธฐ ์ „์šฉ(Read-only) ์†์„ฑ์ด ๋œ๋‹ค.

 

 

 

 

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋™์ผ์กฐ๊ฑด (์ƒˆ์ฐฝ์—ด๋ฆผ)
'Languages ๐Ÿ“œ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ํŒŒ์ด์ฌ์˜ and / or๋Š” True / False๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š”๋‹ค (๊ธฐ๋ณธ๊ฐ’ ์ฒ˜๋ฆฌ ํŒจํ„ด)
์Šน์‹ค
์Šน์‹ค
ํƒ๊ตฌํ•˜๊ณ  ๊นจ๋‹ฌ์œผ๋ฉฐ ์‚ด๊ณ  ์‹ถ์–ด์š” โ‹† โ‚Š ๏พŸ โ˜ฝ * โ‹†
  • ์Šน์‹ค
  • ยซ   2026/07   ยป
    ์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
    1 2 3 4
    5 6 7 8 9 10 11
    12 13 14 15 16 17 18
    19 20 21 22 23 24 25
    26 27 28 29 30 31
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (9)
      • Playground ๐ŸŽข (2)
      • Project Log ๐Ÿ—๏ธ (1)
      • Debug Diary ๐Ÿž (0)
      • Languages ๐Ÿ“œ (2)
      • Computer Science ๐Ÿ“Ÿ (0)
      • Data Science & AI ๐Ÿง  (1)
      • Java & Spring ๐ŸŒ€ (1)
      • Database ๐Ÿ’พ (0)
      • Devops โš™๏ธ (0)
      • Achievements ๐ŸŽ (2)
      • Additional Learning ๐ŸŒป (0)
  • ํƒœ๊ทธ

    python
    Langchain
  • ๋งํฌ

    • Velog Study Memo
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ธ๊ธฐ ๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.5
์Šน์‹ค
Python Property
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”