Dev/DesignPattern

[DesignPattern] Adapter Pattern

황빵 2023. 4. 26. 12:04

Adaptor Pattern (Structural Pattern)

아답터 패턴은 Wrapper 패턴이라고도 불린다.
Wrapper 패턴은 감싸는 것이라는 의미인데

다른 인터페이스를 감싸서 사용하는 것이다.

어댑터 패턴은 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있게 해준다.

아댑터 패턴 2가지 종류

  • 클래스에 의한 어댑터
    • 상속을 통해 어댑터를 구현
  • 객체에 의한 어댑터
    • 위임을 통해 어댑터를 구현

Adaptor Pattern의 예시 (클래스에 의한 어댑터)

class Animal:
    def walk(self):
        print("walk")

class Cat(Animal):
    def Walk(self):
        print("cat walk")

class Dog(Animal):
    def Walk(self):
        print("dog walk")
##############################

class Fish:
    def swim(self):
        print("swim")

def makeWalk(animal : Animal):
    animal.walk()

prettyCat = Cat()
makeWalk(prettyCat)

niceDog = Dog()
makeWalk(niceDog)

# smallFish = Fish()
# makeWalk(smallFish) # error

# 이런 문제를 해결하기위해서 아답터 패턴을 사용한다.
class FishAdaptor(Animal):

    # 생성자를 통해서 Fish 객체를 받는다.
    def __init__(self, fish: Fish):

        # Fish 객체를 Adaptor 클래스에서 보유함 
        self.fish = fish

    def walk(self):
        self.fish.swim()

smallFish = Fish()
walkAbleSmallFish = FishAdaptor(smallFish)
walkAbleSmallFish.walk()
728x90
반응형