
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(Object-Oriented Programming, OOP)์ ์ํํธ์จ์ด๋ฅผ ์ค๊ณํ๊ณ ๊ตฌํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ค์ํ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์ ์ค ํ๋์ด๋ค. ์ด ํจ๋ฌ๋ค์์ ํ๋ก๊ทธ๋จ์ "๊ฐ์ฒด"๋ผ๊ณ ๋ถ๋ฆฌ๋ ๋ ๋ฆฝ์ ์ธ ๊ฐ์ฒด๋ก ๋๋๊ณ , ์ด๋ฌํ ๊ฐ์ฒด๋ค ๊ฐ์ ์ํธ์์ฉ์ ํตํด ํ๋ก๊ทธ๋จ์ ๊ตฌ์ฑํ๋ ๊ฐ๋ฐ ๋ฐฉ๋ฒ๋ก ์ด๋ค.
์ ์ฐจ์งํฅํ๋ก๊ทธ๋๋ฐ์ ํ๋ก๊ทธ๋จ์ ์์ฑํ ๋ ์ผ๋ จ์ ์ ์ฐจ ๋๋ ๋จ๊ณ์ ๋ฐ๋ผ ์ฝ๋๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ์์ด๋ค. ์ด๋ฌํ ๋จ๊ณ๋ ์ ์ฐจ๋ค์ ์ฃผ๋ก ํจ์๋ ์๋ธ๋ฃจํด์ผ๋ก ๋๋์ด์ ธ ์์ผ๋ฉฐ, ๊ฐ๊ฐ์ ํจ์๋ ํน์ ํ ์์ ์ ์ํํ๋ค. ์ฃผ๋ก '์ ๋ ฅ-์ฒ๋ฆฌ-์ถ๋ ฅ'์ ์์ฐจ์ ์ธ ์ ์ฐจ๋ฅผ ๋ฐ๋ฅด๋ฉฐ, ์ฝ๋๋ฅผ ์์์๋ถํฐ ์๋๋ก ์คํํ๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค. C ์ธ์ด์ ๊ฐ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ์ฃผ๋ก ์ ์ฐจ์งํฅ์ ์ธ ์คํ์ผ์ ๋ฐ๋ฅธ๋ค.
ํจ์ํํ๋ก๊ทธ๋๋ฐ์ ํจ์(function)๋ฅผ ์ผ๊ธ ์๋ฏผ์ผ๋ก ์ทจ๊ธํ์ฌ ํ๋ก๊ทธ๋๋ฏ ์์ฑํ๋ ํจ๋ฌ๋ค์์ด๋ค. ํจ์๋ ๋ค๋ฅธ ํจ์์ ์ ๋ฌ๋๊ฑฐ๋ ๋ฐํ๋ ์ ์์ผ๋ฉฐ, ํจ์๋ค ๊ฐ์ ์กฐํฉ์ ํตํด ๋ณต์กํ ์์ ์ ์ํํ๋ค. ์ํ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ , ๋ถ์์ฉ(side effect)์ ์ต์ํํ๋ ค๋ ๋ ธ๋ ฅ์ด ์๋ค. ํจ์ํ ์ธ์ด๋ก๋ Haskell, Lisp, Clojure ๋ฑ์ด ์์ผ๋ฉฐ, ๋ช๋ช ๋ค๋ฅธ ์ธ์ด๋ค๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํ๋ค. ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๋ณ๋ ฌ์ฒ๋ฆฌ์ ์ํ ๊ด๋ฆฌ์ ์ฉ์ดํ๋ฉฐ, ํจ์๋ค์ ์กฐํฉํ์ฌ ๊ฐ๊ฒฐํ๊ณ ์์ ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ๋๋ฐ ๋์์ด ๋๋ค.
๊ฐ์ฒด(Object): ๊ฐ์ฒด๋ ํ์ค ์ธ๊ณ์์์ ์ค์ ๊ฐ์ฒด๋ ์ถ์์ ์ธ ๊ฐ๋ ์ ๋ชจ๋ธ๋งํ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ์๋์ฐจ, ์ฌ๋, ์ํ ๊ณ์ข ๋ฑ์ด ๊ฐ์ฒด๊ฐ ๋ ์ ์์ต๋๋ค. ๊ฐ์ฒด๋ ๋ฐ์ดํฐ(์์ฑ, ์ํ)์ ๋ฉ์๋(๋์, ํจ์)๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
ํด๋์ค(Class): ํด๋์ค๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ธฐ ์ํ ํ ํ๋ฆฟ ๋๋ ์ค๊ณ๋์ ๋๋ค. ํด๋์ค๋ ๊ฐ์ฒด์ ๊ณตํต ์์ฑ๊ณผ ๋์์ ์ ์ํ๋ฉฐ, ๊ฐ์ฒด๋ฅผ ์์ฑํ๋๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, "์๋์ฐจ" ํด๋์ค๋ ๋ชจ๋ ์๋์ฐจ ๊ฐ์ฒด๊ฐ ๊ฐ์ ธ์ผ ํ๋ ์์ฑ(์์, ์๋)๊ณผ ๋ฉ์๋(์ฃผํ, ๋ฉ์ถค)๋ฅผ ์ ์ํ ์ ์์ต๋๋ค.
์ธ์คํด์ค(Instance): ํด๋์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ค์ ๋ก ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ์ธ์คํด์ค๋ผ๊ณ ํฉ๋๋ค. ํด๋์ค๋ ์ฌ๋ฌ ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์์ผ๋ฉฐ, ๊ฐ ์ธ์คํด์ค๋ ๋ ๋ฆฝ์ ์ธ ๋ฐ์ดํฐ์ ๋ฉ์๋๋ฅผ ๊ฐ์ง๋๋ค.
class ํด๋์ค์ด๋ฆ:
# ํด๋์ค ์์ฑ(๋ฉค๋ฒ ๋ณ์) ์ ์
์์ฑ1 = ์ด๊ธฐ๊ฐ1
์์ฑ2 = ์ด๊ธฐ๊ฐ2
# ์์ฑ์ ๋ฉ์๋ (์๋ต ๊ฐ๋ฅ)
def __init__(self, ๋งค๊ฐ๋ณ์1, ๋งค๊ฐ๋ณ์2, ...):
# ์ธ์คํด์ค ์์ฑ ์ด๊ธฐํ
self.์์ฑ1 = ๋งค๊ฐ๋ณ์1
self.์์ฑ2 = ๋งค๊ฐ๋ณ์2
# ๋ฉ์๋(๋ฉค๋ฒ ํจ์) ์ ์
def ๋ฉ์๋1(self, ๋งค๊ฐ๋ณ์1, ๋งค๊ฐ๋ณ์2, ...):
# ๋ฉ์๋ ๋์ ์ ์
pass
def ๋ฉ์๋2(self, ๋งค๊ฐ๋ณ์1, ๋งค๊ฐ๋ณ์2, ...):
# ๋ฉ์๋ ๋์ ์ ์
pass
# ๊ด๋ก์ ํด๋์ค ์ด๋ฆ์ ์ฒซ๊ธ์๋ฅผ ๋๋ฌธ์ ๋ง์ด ํจ
class Dog:
pass # ๋์ค์ ๋ง๋ค๊ณ ์ถ์ ๋
def func():
pass
Rucy = Dog()
print(Rucy)
print(type(Rucy))
> <__main__.Dog object at 0x78df2ef99810>
> <class '__main__.Dog'>
PPomi = Dog()
print(PPomi)
print(type(PPomi))
> <__main__.Dog object at 0x78df2ef99450>
> <class '__main__.Dog'>
class Dog:
name = ''
age = 0
family = ''
Rucy = Dog()
print(Rucy.name)
print(Rucy.age)
print(Rucy.family)
>
> 0
>
Rucy.name = '๋ฃจ์'
Rucy.age = 14
Rucy.family = 'ํฌ๋ฉ'
print(Rucy.name)
print(Rucy.age)
print(Rucy.family)
> ๋ฃจ์
> 14
> ํฌ๋ฉ
PPomi = Dog()
PPomi.name = '๋ฝ๋ฏธ'
PPomi.age = 7
PPomi.family = 'ํผํผ์ธ '
print(PPomi.name)
print(PPomi.age)
print(PPomi.family)
> ๋ฝ๋ฏธ
> 7
> ํผํผ์ธ
class Dog:
name = ''
age = 0
family = ''
def eat(self): # ๋ฌด์กฐ๊ฑด ๋งค๊ฐ๋ณ์ ํ๋๋ self๋ฅผ ๋ฑ๋กํด์ค์ผํจ. ๋ฉ์๋๋ ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ์ ์ํด ๊ณต๋์ผ๋ก ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ๋ฉ์๋๋ฅผ ๋๊ฐ ์ฌ์ฉํ๋์ง ์๊ธฐ ์ํด self์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ๋ค์ด๊ฐ
print('์ฌ๋ฃ๋ฅผ ๋จน์ต๋๋ค')
Rucy = Dog()
Rucy.eat()
> ์ฌ๋ฃ๋ฅผ ๋จน์ต๋๋ค
PPomi = Dog()
PPomi.eat()
> ์ฌ๋ฃ๋ฅผ ๋จน์ต๋๋ค
ํ์ด์ฌ์์ ์์ฑ์(Constructor)๋ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ์์ฑ๋ ๋ ์๋์ผ๋ก ํธ์ถ๋๋ ํน๋ณํ ๋ฉ์๋์ด๋ค. ์์ฑ์๋ ๊ฐ์ฒด์ ์ด๊ธฐํ๋ฅผ ๋ด๋นํ๋ฉฐ, ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋ ํ์ํ ์์ฑ์ ์ด๊ธฐํํ๊ณ ์ค์ ํ๋ ์ญํ ์ ํ๋ค. ํ์ด์ฌ์์ ์์ฑ์ ๋ฉ์๋๋ __init__๋ผ๊ณ ์ด๋ฆ์ด ์ ํด์ ธ ์๋ค.
class ํด๋์ค์ด๋ฆ:
def __init__(self, ๋งค๊ฐ๋ณ์1, ๋งค๊ฐ๋ณ์2): # ๊ตณ์ด self๋ผ๊ณ ์ฐ์ง ์์๋ ๋์ง๋ง ๊ด๋ก์ ์ผ๋ก self๋ฅผ ๋ง์ด ์
self.์์ฑ1 = ๋งค๊ฐ๋ณ์1
self.์์ฑ2 = ๋งค๊ฐ๋ณ์2
class Dog:
def __init__(self):
print('์์ฑ์ ํธ์ถ')
Rucy = Dog() # ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋ init ๋ฉ์๋๊ฐ ์๋์ผ๋ก ํธ์ถ๋จ
> ์์ฑ์ ํธ์ถ
class Dog():
def __init__(self, name, age, family):
self.name = name
self.age = age
self.family = family
Rucy = Dog('๋ฃจ์', 14, 'ํฌ๋ฉ') # ์์ ๋ฐฉ์๊ณผ๋ ๋ค๋ฅด๊ฒ init ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋ ์์ฑ์ ๋ฐ๋ก ๋ถ์ฌํด์ค ์ ์๋ค. ์์ฑ์ ๋ฏธ๋ฆฌ ์ง์ ํด๋๋ฉด ๋ฉ๋ชจ๋ฆฌ๋ ๋ญ๋น๋๊ณ ํ์ฅ์ฑ๋ ๋จ์ด์ง
print(Rucy.name)
print(Rucy.age)
print(Rucy.family)
> ๋ฃจ์
> 14
> ํฌ๋ฉ
๋ฉ์๋(Method)๋ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP)์์ ์ฌ์ฉ๋๋ ํจ์์ ๋น์ทํ ๊ฐ๋ ์ด์ง๋ง, ํด๋์ค ๋ด๋ถ์ ์ ์๋์ด ํน์ ๊ฐ์ฒด์ ์ฐ๊ฒฐ๋ ํจ์์ด๋ค. ๋ฉ์๋๋ ํด๋น ํด๋์ค์ ๋ชจ๋ ๊ฐ์ฒด์์ ๊ณต์ ๋๋ฉฐ, ๊ฐ์ฒด์ ๋์์ ์ ์ํ๊ฑฐ๋ ํน์ ์์ ์ ์ํํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
class Counter:
def __init__(self):
self.num = 0
def increment(self):
self.num += 1
def decrement(self):
self.num -= 1
def reset(self):
self.num = 0
def current_value(self):
return self.num
KBbank = Counter()
print(KBbank.current_value())
> 0
KBbank.increment()
KBbank.increment()
KBbank.increment()
print(KBbank.current_value())
> 3
KBbank.decrement()
KBbank.decrement()
HanaBank = Counter()
print(HanaBank.current_value())
> 0
HanaBank.increment()
HanaBank.increment()
HanaBank.increment()
HanaBank.increment()
HanaBank.increment()
print(HanaBank.current_value())
> 0
HanaBank.reset()
print(HanaBank.current_value())
> 0
print(KBbank.current_value())
> 1
์ธ์คํด์ค ๋ฉ์๋(Instance Method): ๊ฐ์ฒด์ ์ํ๋ฅผ ์กฐ์ํ๊ฑฐ๋ ๊ฐ์ฒด์ ํน์ ์์ ์ ์ํํ๋ ๋ฉ์๋์ ๋๋ค. ๋๋ถ๋ถ์ ํด๋์ค ๋ฉ์๋๋ ์ธ์คํด์ค ๋ฉ์๋์ ๋๋ค. ์์ ์์ ์์ ๋ณด์ฌ์ง __init__ ๋ฉ์๋๋ ์ธ์คํด์ค ๋ฉ์๋์ ๋๋ค.
ํด๋์ค ๋ฉ์๋(Class Method): ํด๋์ค ๋ ๋ฒจ์์ ๋์ํ๋ฉฐ, ๋ชจ๋ ์ธ์คํด์ค๊ฐ ๊ณต์ ํ๋ ๋ฉ์๋์ ๋๋ค. ํด๋์ค ๋ฉ์๋๋ @classmethod ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ํ๋ฉฐ, ์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ก cls๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ ์ ๋ฉ์๋(Static Method): ํน์ ํด๋์ค๋ ์ธ์คํด์ค์ ๊ด๋ จ์ด ์๋ ๋ฉ์๋๋ก, ํด๋์ค ๋ด๋ถ์ ์ ์๋์ด ์์ง๋ง ํด๋์ค๋ ์ธ์คํด์ค์ ๋ ๋ฆฝ์ ์ผ๋ก ํธ์ถ๋ ์ ์์ต๋๋ค. ์ ์ ๋ฉ์๋๋ @staticmethod ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ํฉ๋๋ค.
class Math:
def add(self, x, y):
return x + y
def multiply(self, x, y):
return x * y
math = Math()
result1 = math.add(3, 4 )
print(result1)
result2 = math.multiply(3, 4)
print(result2)
> 7
> 12
class Calculator:
num = 1 # ํด๋์ค ๋ณ์
def add(self, x, y):
return x + y
@classmethod
def subtract(cls, x, y): # cls๋ self์ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ด๋ก์ ์ผ๋ก ํด๋์ค ๋ฉ์๋์์ ์ฌ์ฉํ๋ ๊ฑฐ๋ผ ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ์ฌ์ฉํด๋ ๋๋ค
return x - y
# return x - cls.num ์ด๋ฐ ์์ผ๋ก ์์ ํด๋์ค ๋ณ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
@staticmethod
def multiply(x, y):
return x * y
def divide(x, y):
return x / y
calc = Calculator()
# ์ธ์คํด์ค ๋ฉ์๋
result1 = calc.add(3, 4)
print(result1)
# ํด๋์ค ๋ฉ์๋
result2 = Calculator.subtract(4, 3) # ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์๊ณ ๋ฐ๋ก ํธ์ถ ๊ฐ๋ฅ
print(result2)
# ์ ์ ๋ฉ์๋
result3 = Calculator.multiply(3, 4) # ํด๋์ค ๋ฉ์๋์ ํธ์ถ ๋ฐฉ์์ ๊ฐ์ผ๋, ๋ฉ์๋๋ฅผ ์์ฑํ ๋ self๋ฅผ ๋ฃ์ง ์๋๋ค.
print(result3)
# ํ์์ ์ธ ์ฐจ์ด๋ง ์๋๋? ๊ทธ๊ฑด ์๋ -> ํด๋์ค ๋ฉ์๋๋ ํด๋์ค ๋ณ์ ์ฌ์ฉ ๊ฐ๋ฅ
# ์ ์ ๋ฉ์๋๋ ๋ฉ์๋ ์คํ ํ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ์ง ์๊ณ ํธ์ถ๋ง ํ๊ณ ๋๋จ
> 7
> 1
> 12
ํด๋ก์ (Closure)๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ค์ํ ๊ฐ๋ ์ค ํ๋๋ก, ํจ์์ ๊ทธ ํจ์๊ฐ ์ฐธ์กฐํ๋ ์ธ๋ถ ๋ณ์(๋๋ ์์ ๋ณ์) ์ฌ์ด์ ๊ด๊ณ๋ฅผ ๋ํ๋ธ๋ค. ํด๋ก์ ๋ ํจ์์ ๋ด๋ถ์์ ์ ์๋ ํจ์๋ก, ๋ด๋ถ ํจ์๊ฐ ์ธ๋ถ ํจ์์ ๋ณ์์ ์ ๊ทผํ ์ ์๊ณ , ์ธ๋ถ ํจ์๋ ๋ด๋ถ ํจ์๋ฅผ ๋ฐํํ ์ ์๋ค. ์ด๋ก ์ธํด ํจ์์ ๊ทธ ํจ์๊ฐ ์ฐธ์กฐํ๋ ์ํ(๋ณ์)๋ฅผ ํจ๊ป ์ ์ฅํ๊ณ ์ ์งํ ์ ์๋ค.
def mul2(n):
return n * 2
print(mul2(10))
print(mul2(5))
> 20
> 10
def mul5(n):
return n * 5
print(mul5(10))
print(mul5(5))
# 1๋ถํฐ 10๊น์ง ๋ง๋ค๊ธฐ? ์ดํ ๊ท์ฐฎ์!
> 50
> 25
class Mul:
def __init__(self, m):
self.m = m
def mul(self, n):
return self.m * n
mul2 = Mul(2)
print(mul2.mul(10))
print(mul2.mul(5))
> 20
> 10
class Mul:
def __init__(self, m):
self.m = m
def __call__(self, n):
return self.m * n
mul2 = Mul(2)
print(mul2(10)) # ๊ฐ์ฒด๋ฅผ ์์ฑํ ํ ๊ทธ ๊ฐ์ฒด๋ฅผ ํจ์์ฒ๋ผ ์ฌ์ฉํ๋ฉด call ํธ์ถ๋จ
print(mul2(5))
mul5 = Mul(5)
print(mul5(10))
print(mul5(5))
> 20
> 10
> 50
> 25
# ํด๋ก์ ๋ง๋ค๊ธฐ
def mul(m):
def inner(n): # ํจ์ ์์ ํจ์
return m * n
return inner # ๋ด๋ถ ํจ์๋ฅผ ์ธ๋ถ ํจ์์ชฝ์ผ๋ก ๋ถ๋ฌ์ฃผ๊ธฐ ์ํด ์ฌ์ฉ
mul2 = mul(2)
print(mul2(10))
> 20
mul5 = mul(5)
print(mul5(10)) # ๊ฐ์ฒด๋ฅผ ์์ฑํ ํ ๊ทธ ๊ฐ์ฒด๋ฅผ ํจ์์ฒ๋ผ ์ฌ์ฉํ๋ฉด call ํธ์ถ๋จ
print(mul5(5))
> 50
> 25
# ํด๋ก์ ๋ง๋ค๊ธฐ
def mul(m):
def inner(n): # ํจ์ ์์ ํจ์
return m * n
๋ฐ์ฝ๋ ์ดํฐ(Decorator)๋ ํ์ด์ฌ์์ ํจ์๋ ๋ฉ์๋์ ๋์์ ์์ ํ๊ฑฐ๋ ํ์ฅํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๋๊ตฌ์ด๋ค. ๋ฐ์ฝ๋ ์ดํฐ๋ ํจ์๋ ๋ฉ์๋๋ฅผ ๋ํํ๊ฑฐ๋ ๊ฐ์ธ์ ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ๊ณผ ๊ฐ๋ ์ฑ์ ํฅ์์ํจ๋ค. ๋ฐ์ฝ๋ ์ดํฐ๋ @ ๊ธฐํธ๋ฅผ ์ฌ์ฉํ์ฌ ํจ์๋ ๋ฉ์๋ ์์ ์ ์ฉ๋๋ค.
import time
def func1(a, b):
start = time.time() # ํ์ฌ์๊ฐ์ ์ซ์๋ก ๊ฐ์ ธ์ด
print('ํจ์๊ฐ ์์๋์์ต๋๋ค')
result = a + b
end = time.time()
print(f'ํจ์๊ฐ ๋๋ฌ์ต๋๋ค. ์์์๊ฐ: {end - start}')
return result
result = func1(10, 3)
print(result)
> ํจ์๊ฐ ์์๋์์ต๋๋ค
> ํจ์๊ฐ ๋๋ฌ์ต๋๋ค. ์์์๊ฐ: 0.0013720989227294922
> 13
def func2(a, b):
start = time.time() # ํ์ฌ์๊ฐ์ ์ซ์๋ก ๊ฐ์ ธ์ด
print('ํจ์๊ฐ ์์๋์์ต๋๋ค')
result = a * b
end = time.time()
print(f'ํจ์๊ฐ ๋๋ฌ์ต๋๋ค. ์์์๊ฐ: {end - start}')
return result
result = func2(10, 3)
print(result)
> ํจ์๊ฐ ์์๋์์ต๋๋ค
> ํจ์๊ฐ ๋๋ฌ์ต๋๋ค. ์์์๊ฐ: 0.008896827697753906
> 30
print(format(0.001034324344535, 'f')) # ์์์ ๋๋ฌด ๊ธธ๊ฑฐ๋ e๋ญ์๊นฝ ๋์ฌ ๋ ๋ณํ๋ฒ
> 0.001034
# ๋ฐ์ฝ๋ ์ดํฐ ๋ง๋ค๊ธฐ
def func1(a, b):
result = a + b
return result
def func2(a, b):
result = a * b
return result
def elapsed(func):
def wrapper(a, b):
start = time.time() # ํ์ฌ์๊ฐ์ ์ซ์๋ก ๊ฐ์ ธ์ด
print('ํจ์๊ฐ ์์๋์์ต๋๋ค')
result = func(a, b)
end = time.time()
print(f'ํจ์๊ฐ ๋๋ฌ์ต๋๋ค. ์์์๊ฐ: {end - start}')
return result
return wrapper
deco1 = elapsed(func1) # func1 ํจ์ ๊ฐ์ ธ์ด
result = deco1(10, 3)
print(result)
> ํจ์๊ฐ ์์๋์์ต๋๋ค
> ํจ์๊ฐ ๋๋ฌ์ต๋๋ค. ์์์๊ฐ: 0.0023889541625976562
> 13
deco2 = elapsed(func2) # func2 ํจ์ ๊ฐ์ ธ์ด
result = deco2(10, 3)
print(result)
> ํจ์๊ฐ ์์๋์์ต๋๋ค
> ํจ์๊ฐ ๋๋ฌ์ต๋๋ค. ์์์๊ฐ: 0.0019953250885009766
> 30
# ๋ฐ์ฝ๋ ์ดํฐ ๋ง๋ค๊ธฐ
@elapsed
def func1(a, b):
result = a + b
return result
@elapsed
def func2(a, b):
result = a * b
return result
func1(10, 3) # ์์์ฒ๋ elapsed ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ง ์์๋
func2(10, 3)
> ํจ์๊ฐ ์์๋์์ต๋๋ค
> ํจ์๊ฐ ๋๋ฌ์ต๋๋ค. ์์์๊ฐ: 0.00011992454528808594
> ํจ์๊ฐ ์์๋์์ต๋๋ค
> ํจ์๊ฐ ๋๋ฌ์ต๋๋ค. ์์์๊ฐ: 2.9087066650390625e-05
> 30