끼워맞추기 패턴
Adapter Pattern은 서로 다른 타입인 객체들이 함께 동작하도록 만드는 디자인 패턴입니다.
말 그대로 Adapter라고 생각하면 쉽습니다. 외국 여행 가면 어떤 나라는 110v를 사용하기 때문에 220v로 된 케이블을 110v 콘센트에 꽂기 위해선 변압기를 사용해야 하죠. 여기서 변압기가 바로 Adapter pattern의 역할을 한 것입니다. 너무 흔한 예제입니다.
Flutter라는 Framework에 대해 알고 계신가요? Flutter는 구글이 만든 프레임워크입니다. 한 번의 코드로 두 개의 앱을 만들 수 있단 장점이 있죠. 이걸 Adapter pattern으로 구현하면?
Adapter pattern의 클래스 다이어그램 먼저 보겠습니다.
Legacy Object - iOS 시스템 혹은 Android System을 의미합니다.
Adapter - Flutter framework를 의미합니다.
Object using an adapter - Flutter project를 의미합니다.
New Protocol - Flutter framework가 동작하도록 만들어주는 protocol이라고 생각하면 좋습니다.
그렇다면 코드로 표현하면 어떻게 될까요?
우선 변환될 목표 객체 (Legacy Object)입니다.
그다음은 Adapter 객체인데, 이 객체는 New Protocol을 따르기 때문에 New Protocol과 함께 살펴보겠습니다. 카메라를 실행하는 코드로 예시를 보겠습니다.
Adapter는 Legacy Object를 소유하면서 New Protocol의 메서드는 그 Legacy Object의 메서드를 호출하게 되죠.
그렇다면 이제 변환될 코드인 Object using an adapter를 보겠습니다.
protocol을 소유하며 특정 메서드가 protocol의 메서드를 호출하는 것이 보이시나요?
Flutter가 동작하는 것을 보겠습니다.
프로젝트가 iOS일 땐 iOSSytemAdapter를 사용해서 Flutter 객체로 넘기고, Android일 땐 AndroidSystemAdapter를 사용해서 Flutter 객체로 넘기는 것을 확인할 수 있습니다.
즉, 하나의 코드로 Adapter만 바꿈으로써 유연하게 대처가 가능한 것을 확인할 수 있습니다.
당연하게 Flutter가 위의 코드와 똑같이 만들진 않았지만, Adapter패턴이 이런 거구나, 정도로 알아두면 좋을 것 같습니다.
읽어주셔서 고맙습니다.
Raywenderlich의 Design Patterns by Tutorials를 참고했습니다.
https://www.raywenderlich.com/books/design-patterns-by-tutorials/v3.0