brunch

You can make anything
by writing

C.S.Lewis

by 윤민섭 Nov 23. 2020

Adapter Pattern

끼워맞추기 패턴

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

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari