프록시 패턴

김대익·2022년 3월 31일
0

웹에서 클라이언트와 서버가 있으면 서버 앞에
프록시 서버를 두는게 일반적이다.

프록시 서버는 보통

  • 서버와 통신하면서 필요한 정보를 클라이언트에게 전달
  • 로그, 통계 정보
  • 자주 사용하는 정보를 캐시로 저장해서 서버와 소통을 줄임(서버 부하 감소)

의 역할을 한다


이와 비슷하게 클라이언트 코드와 객체사이 프록시 객체를 두어

  • 객체의 인수를 받아 실행 전 미리 체크를 하거나
  • 로그를 남기거나
  • 객체의 결과를 캐시로 가짐

를 할 수 있다.

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()

0개의 댓글