μμ±μ : μ ν¬μ¬
λ³Έ μλ£λ 'νμ΄μ¬ λμμΈ ν¨ν΄ 2/e (Chetan Giridhar)' μ±
μ ν λλ‘ μμ±λμμ΅λλ€. λ°λΌμ λͺ¨λ μμ μ½λμλ μ μλ₯Ό νμνλ __author__ = 'Chetan'
μ΄ ν¬ν¨λ©λλ€.
Table of Contents
- ν νλ¦Ώ λ©μλ ν¨ν΄ κ°μ
- ν νλ¦Ώ λ©μλ ν¨ν΄μ ꡬμ±μμ
- ν νλ¦Ώ λ©μλ ν¨ν΄ ꡬν μ½λ
- ν νλ¦Ώ λ©μλ ν¨ν΄ μμ (iOS μ»΄νμΌλ¬)
- ν νλ¦Ώ λ©μλ ν¨ν΄ β νν¬
- ν 리μ°λ μμΉκ³Ό ν νλ¦Ώ λ©μλ
- ν νλ¦Ώ λ©μλ ν¨ν΄μ μ₯λ¨μ
- μμ£Ό 묻λ μ§λ¬Έ
νλ ν¨ν΄μμλ κ° κ°μ²΄μ μν μ΄ μ€μνλ€. κ°μ²΄λ μνΈ μμ©μ ν΅ν΄ λ ν° κΈ°λ₯μ ꡬνν μ μλ€. ν
νλ¦Ώ λ©μλ ν¨ν΄μ νλ ν¨ν΄μ ν μ’
λ₯λ‘ μ ν리μΌμ΄μ
μ λΌλλ ν΅μ¬ μκ³ λ¦¬μ¦μ Template Method
λΌλ κ³³μ μ μνλ€. ν
νλ¦Ώ λ©μλ ν¨ν΄μ μκ³ λ¦¬μ¦μ μΌλΆ λ¨κ³λ₯Ό μλΈν΄λμ€νν΄ μκ³ λ¦¬μ¦μ λΆλΆμ μμ λ° μ¬μ μλ₯Ό μ½κ² νλ€. μ¦ μλΈν΄λμ€λ₯Ό μμ λ‘κ² μ¬μ μν μ μλ€.
- μ¬λ¬ μκ³ λ¦¬μ¦ λλ ν΄λμ€μ ꡬ쑰λ λ‘μ§μ΄ λΉμ·ν λ
- μκ³ λ¦¬μ¦μ λ¨κ³λ³λ‘ μλΈν΄λμ€νν΄ μ½λμ μ€λ³΅μ μ€μΌ μ μλ κ²½μ°
- μλΈν΄λμ€λ₯Ό μ€λ²λΌμ΄λν΄ μ¬λ¬ μκ³ λ¦¬μ¦μ ꡬνν μ μλ κ²½μ°
- μκ³ λ¦¬μ¦μ λΌλλ₯Ό μμ μ°μ°μΌλ‘ ꡬν
- μκ³ λ¦¬μ¦μ ꡬ쑰λ₯Ό μμ νμ§ μκ³ μΌλΆ μλΈν΄λμ€λ₯Ό μ¬μ μ
- μ½λμ μ¬μ¬μ©κ³Ό μ€λ³΅ μ΅μν
- κ³΅ν΅ μΈν°νμ΄μ€ λ° κ΅¬ν νμ©
- μκ³ λ¦¬μ¦μ λ¨κ³λ₯Ό μ μνλ μΈν°νμ΄μ€
- μκ³ λ¦¬μ¦μ κ° λ¨κ³λ₯Ό μ μνλ μΆμ λ©μλλ‘ κ΅¬μ±λμ΄ μλ€.
ConcreteClass
μμ μ€λ²λΌμ΄λνλ€.
- λ¨κ³λ³ μλΈν΄λμ€
- μ¬λ¬ μΆμ λ©μλλ‘ κ΅¬μ±λ μκ³ λ¦¬μ¦μ μλΈν΄λμ€λ₯Ό ꡬννλ€.
- λ¨κ³λ³ λ©μλλ₯Ό νΈμΆνλ μκ³ λ¦¬μ¦ μ μ
- μκ³ λ¦¬μ¦μ λΌλλ₯Ό μ μνλ€.
- μ 체 μκ³ λ¦¬μ¦μ μ μνλ μ¬λ¬ μΆμ λ©μλλ₯Ό νΈμΆνλ€.
__author__ = 'Chetan'
from abc import ABCMeta, abstractmethod
# μκ³ λ¦¬μ¦μ μΈν°νμ΄μ€ μ μ
class AbstractClass(metaclass=ABCMeta):
def __init__(self):
pass
@abstractmethod
def operation1(self):
pass
@abstractmethod
def operation2(self):
pass
# λ¨κ³λ³ λ©μλλ₯Ό νΈμΆνμ¬ μκ³ λ¦¬μ¦ λΌλ μ μ
def template_method(self):
print("Defining the Algorithm. Operation1 follows Operation2")
self.operation2()
self.operation1()
# μΈν°νμ΄μ€λ₯Ό μ€λ²λΌμ΄λνμ¬ μλΈν΄λμ€ κ΅¬ν
class ConcreteClass(AbstractClass):
def operation1(self):
print("My Concrete Operation1")
def operation2(self):
print("Operation 2 remains same")
# μ¬μ© μμ
class Client:
def main(self):
self.concreate = ConcreteClass()
self.concreate.template_method()
client = Client()
client.main()
__author__ = 'Chetan'
from abc import ABCMeta, abstractmethod
# μ»΄νμΌλ¬ μκ³ λ¦¬μ¦ μΈν°νμ΄μ€
class Compiler(metaclass=ABCMeta):
# μμ€ μμ§
@abstractmethod
def collectSource(self):
pass
# κ°μ²΄λ‘ μ»΄νμΌ
@abstractmethod
def compileToObject(self):
pass
# μ€ν
@abstractmethod
def run(self):
pass
# λ¨κ³λ³ λ©μλλ₯Ό νΈμΆνμ¬ μ»΄νμΌ κ³Όμ μ€κ³
def compileAndRun(self):
self.collectSource()
self.compileToObject()
self.run()
# μΈν°νμ΄μ€λ₯Ό μ€λ²λΌμ΄λνμ¬ μκ³ λ¦¬μ¦ κ΅¬μ²΄ν
class iOSCompiler(Compiler):
def collectSource(self):
print("Collecting Swift Source Code")
def compileToObject(self):
print("Compiling Swift code to LLVM bitcode")
def run(self):
print("Program runing on runtime environment")
# μ¬μ© μμ
iOS = iOSCompiler()
iOS.compileAndRun()
νν¬λ μΆμ ν΄λμ€(AbstactClass
)μ μ μλλ λ©μλλ€. μΌλ°μ μΌλ‘ κΈ°λ³Έ ꡬνμ ν¬ν¨νμ¬ μ μλλ€. νν¬λ μλΈν΄λμ€κ° μκ³ λ¦¬μ¦ μ€κ° λ¨κ³λ₯Ό μ μ΄ν μ μλ κΈ°λ₯μ μ 곡νλ€. μλ₯Ό λ€μ΄ μμ λ€λ£¬ iOS μ»΄νμΌλ¬ μμ μμ run()
λ©μλ μ€ν μ μ μ μ μκ² μ€ν μ¬λΆλ₯Ό νμΈνλ κ°λ¨ν νν¬λ₯Ό μΆκ°ν μ μλ€. λ€λ§ μλΈν΄λμ€λ νν¬λ₯Ό κΌ μ¬μ©νμ§ μμλ λλ€. μλΈν΄λμ€λ μΆμ λ©μλλ₯Ό λ°λμ ꡬννμ¬ κ΅¬μ²΄ν ν΄μΌνμ§λ§ νν¬λ μ νμ μΌλ‘ ꡬνν μ μλ€.
ν 리μ°λ μμΉμ βλ¨Όμ μ°λ½νμ§ λ§μΈμ. μ ν¬κ° μ°λ½ λλ¦¬κ² μ΅λλ€.β
μ κΈ°λ°νλ λμμΈ μ² νμ΄λ€. ν 리μ°λ μν μ μμ¬μμ λ°°μ°κ° νμν λ μ μμ¬κ° λ°°μ°μκ² μ°λ½νλ κ²μμ λΉλ‘―λ μμΉμ΄λ€. μμ μμκ° μΈμ μ΄λ€ νμ μμκ° νμνμ§ κ²°μ νλ€. μ¦ μμ μμκ° νμ μμμ λν μ κ·Ό λ° νμμ±μ μ§μ κ²°μ νλ κ°λ
μ΄λ€. ν
νλ¦Ώ λ©μλ ν¨ν΄μμλ μμ μΆμ ν΄λμ€κ° μκ³ λ¦¬μ¦μ νμν λ¨κ³λ₯Ό μ 리νλ€. μκ³ λ¦¬μ¦μ λ°λΌ κ° λ¨κ³μ λ§λ νμ ν΄λμ€κ° νΈμΆλλ€.
- μ½λ μ€λ³΅μ΄ μλ€.
- μ»΄ν¬μ§μ μ΄ μλ μμμ μ¬μ©νλ―λ‘ μ½λλ₯Ό μ¬νμ©ν μ μλ€. μΌλΆμ ν¨μλ§ μ€λ²λΌμ΄λνλ©΄ λλ€.
- μκ³ λ¦¬μ¦μ κ° λ¨κ³λ₯Ό μλΈν΄λμ€μμ ꡬνν μ μλ μ μ°μ±μ μ 곡νλ€.
- μ½λ λλ²κΉ λ° μ΄ν΄κ° μ΄λ €μΈ μ μλ€. μΆμ λ©μλμ ꡬνλμ§ μμ λ©μλλ₯Ό ꡬννκ±°λ μΆμ λ©μλλ₯Ό μμ ꡬννμ§ μλ μ€μλ₯Ό μ μ§λ₯Ό μ μλ€. μλ¬ νΈλ€λ§κ³Ό λ¬Έμνκ° νμμ μ΄λ€.
- μ΄λ€ κ³μΈ΅μ ν΄λμ€(μμ λ° νμ ν΄λμ€)λ₯Ό μμ νλ€λ©΄ μ 체 ꡬ쑰 λ° κ΅¬νμ μν₯μ μ€ μ μμ΄ μ μ§ λ³΄μκ° μ΄λ ΅λ€.
1. νμ ν΄λμ€κ° μμ ν΄λμ€λ₯Ό νΈμΆνλ κ²μ λ§μμΌ νλκ°? μλλ€. νμ ν΄λμ€λ μμμ ν΅ν΄ μμ ν΄λμ€λ₯Ό νΈμΆν μ μμ΄μΌ νλ€. νμ§λ§ νλ‘κ·Έλλ¨Έλ μνμ ν΄λμ€κ° μλ‘ μμ‘΄νλ μν μ’ μμ±μ΄ μλλ‘ μ£Όμν΄μΌ νλ€.
2. μ λ΅ ν¨ν΄κ³Ό ν νλ¦Ώ ν¨ν΄μ μ°¨μ΄μ μ 무μμΈκ°? λ ν¨ν΄ λͺ¨λ μκ³ λ¦¬μ¦μ μΊ‘μννλ€. νμ§λ§ ν νλ¦Ώ ν¨ν΄μ μμμ μ¬μ©νλ λ°λ©΄μ μ λ΅ ν¨ν΄μ μ»΄ν¬μ§μ μ μ¬μ©νλ€. ν νλ¦Ώ λ©μλ ν¨ν΄μ μλΈν΄λμ€λ₯Ό μ¬μ©ν΄ μ»΄νμΌ λ¨κ³μμ μκ³ λ¦¬μ¦μ μ ννμ§λ§ μ λ΅ ν¨ν΄μ λ°νμμ μ ννλ€.