[swift] Adapter 디자인 패턴

Adapter 디자인 패턴은 서로 다른 인터페이스를 가진 두 개의 클래스를 함께 동작할 수 있도록 하는 패턴입니다. 이 패턴은 기존의 클래스를 변경하지 않고 새로운 클래스를 도입하여 두 클래스 간의 호환성을 확보합니다.

어떤 상황에서 사용할까?

보통 어떤 인터페이스를 사용하여 코드를 작성했지만, 새로운 라이브러리나 프레임워크를 사용하려고 할 때 해당 인터페이스와 호환되지 않을 경우 Adapter 패턴을 사용할 수 있습니다.

예를 들어, iOS 앱을 개발하는 도중에 기존의 데이터 모델을 그대로 사용하면서도 새로운 데이터베이스 라이브러리를 도입하고 싶다면, Adapter를 사용하여 두 모델 간의 호환성을 유지할 수 있습니다.

Adapter 패턴 구현하기

class LegacyDatabase {
    func fetchData() -> [String] {
        return ["Data1", "Data2", "Data3"]
    }
}

protocol NewDatabase {
    func getData() -> [String]
}

class DatabaseAdapter: NewDatabase {
    private let legacyDatabase = LegacyDatabase()

    func getData() -> [String] {
        return legacyDatabase.fetchData()
    }
}

위의 예시에서 LegacyDatabase 클래스는 기존의 데이터베이스를 나타내고, NewDatabase 프로토콜은 새로운 데이터베이스 인터페이스를 정의합니다. DatabaseAdapter는 이 두 클래스 간의 호환성을 제공하여 NewDatabase를 구현하고 있습니다.

장점

Adapter 패턴을 사용함으로써 기존 클래스의 코드 변경 없이 새로운 클래스를 이용할 수 있습니다. 따라서 소프트웨어의 유지 보수 및 확장이 용이해집니다.

결론

Adapter 패턴은 서로 다른 인터페이스를 가진 클래스들을 함께 사용하기 편리하게 만들어주는 디자인 패턴입니다. 새로운 라이브러리나 프레임워크를 도입하려고 할 때, Adapter 패턴을 활용하여 호환성을 유지하면 기존 코드의 변경을 최소화할 수 있습니다.

참고 자료