[구조 패턴] Adapter 패턴

suojae·2024년 1월 28일
0

[iOS] 디자인패턴

목록 보기
9/10

하나의 인터페이스를 다른 인터페이스로 전환해준다.
어떤 클래스가 + 모양이고 클라이언트는 별모양의 인터페이스만 받을 수 있다면 Adapter패턴을 이용해 +모양 클래스를 별모양 클래스로 바꾸어준다.
Adapter는 바꿀 클래스를 감싸는 느낌이나서 wrapper라 불리기도한다.

protocol Animal {
    func walk()
}

class Cat: Animal {
    func walk() {
        print("Cat walking")
    }
}

class Dog: Animal {
    func walk() {
        print("Dog walking")
    }
}

class Fish {
    func swim() {
        print("Fish swimming")
    }
}

class FishAdapter: Animal {
    private let fish: Fish

    init(fish: Fish) {
        self.fish = fish
    }

    func walk() {
        self.fish.swim()
    }
}

func makeWalk(animal: Animal) {
    animal.walk()
}

let kitty = Cat()
let bingo = Dog()
let nemo = Fish()

makeWalk(animal: kitty)
makeWalk(animal: bingo)

// 'makeWalk(nemo)'는 불가능합니다. nemo는 'Animal' 프로토콜을 따르지 않기 때문입니다.

let adaptedNemo = FishAdapter(fish: nemo)
makeWalk(animal: adaptedNemo)
profile
Hi 👋🏻 I'm an iOS Developer who loves to read🤓

0개의 댓글