웹에서 클라이언트와 서버가 있으면 서버 앞에
프록시 서버를 두는게 일반적이다.
프록시 서버는 보통
의 역할을 한다
이와 비슷하게 클라이언트 코드와 객체사이 프록시 객체를 두어
를 할 수 있다.
class Cat:
def speak(self):
print("meow")
kitty = Cat()
kitty.speak()
class CatProxy:
def __init__(self, cat:Cat):
self.cat = cat
def speak(self):
print("before speak") #validity checks,lazy init, more
self.cat.speak()
print("after speak") #loggings
kitty_proxy = CatProxy(kitty)
kitty_proxy.speak()
먼저 Cat 객체를 property로 가지고
Cat 클래스의 앞에서 행동하므로 같은 interface를 가져야하기때문에
Cat 클래스처럼 speak() 메서드도 가지고 있어야한다(똑같이 동작할 필요는 없다)
같은 interface를 가지기에
앞의 코드처럼 Cat 객체를 상속받거나
Cat 객체의 interface 클래스인 animal에서 상속받는 방법이 있다.
class Animal: #interface class
def speak(self):
pass
class Cat(Animal):
def speak(self):
print("meow")
class CatProxy(Animal):
def __init__(self, cat:Cat):
self.cat = cat
def speak(self):
print("before speak")
self.cat.speak()
print("after speak")
def doSpeak(animal:Animal):
animal.speak()