클래스 코드와 클라이언트 코드의 interface가 서로 다를 때
서로 호환되도록 번역시켜주는 패턴이다.
위와 같이 Animal을 상속받은 Cat, Dog클래스는 walk() 메서드를 가지고 있지만
fish는 Animal을 상속받지않아 walk() 메서드가 없다.
따라서 walk() 메서드를 사용하기 위해서는 어댑터가 필요하다
class Animal: #interface class
def walk(self):
pass
class Cat(Animal):
def walk(self):
print("cat walking")
class Dog(Animal):
def walk(self):
print("dog walking")
def makeWalk(animal : Animal):
animal.walk()
class Fish:
def swim(self):
print("fish swimming")
class FishAdapter(Animal):
def __init__(self,fish:Fish):
self.fish = fish
def walk(self):
self.fish.swim()
Fish 클래스는 swim() 메서드만 가지고 있다.
walk() 메서드를 implementation하기 위해
Fish객체를 받고 FishAdapter내에 가지고 있는다.
이후 walk() 메서드는
가지고 있는 Fish객체의 swin() 메서드를 호출 시킨다.