[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 패턴을 활용하여 호환성을 유지하면 기존 코드의 변경을 최소화할 수 있습니다.
참고 자료
- Swift Design Patterns by Tutorials - RayWenderlich.com
- Adapter Pattern - Design Patterns - Refactoring.Guru