본문 바로가기

Programming/Design pattern

[Design pattern] Adapter pattern

Adapter Pattern

Adapter Pattern

어댑터 패턴은 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로, 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동하도록 해준다. (출처:위키백과)

아래 사진으로 보면 클래스의 인터페이스 - Client, 다른 인터페이스 - Adaptee 로 보면 된다.

어댑터 패턴은 이미 구축되어있는 것을 새로운 어떤 것이 사용할 때 양쪽 간의 호환성을 유지해주기 위해 사용한다. 기존의 로직을 그대로 이용할 수 있도록 중간에 변환기를 만든다는 느낌으로 이해하면 된다.

어댑터 패턴을 구현하는 방식은 아래와 같이 두가지가 있다.

  1. 클래스 방식 : 어댑터 클래스에서 기존 클래스를 extends 하고, 인터페이스를 implements 하는 방식이다.
  2. 객체 방식 : 어댑터 클래스 내부에 기존 클래스 객체를 멤버로 선언(Composite pattern?)하고, 인터페이스를 implements 하는 방식이다.

참고한 블로그에 예시와 함께 잘 설명되어있다. 메소드 명이 동일한데, 자식 클래스에서 부모 클래스 메소드를 호출한 것으로 이해하면 된다.

추가적으로 이 블로그 예제도 아주 잘 설명되어있다.

하지만 안드로이드에서는 어댑터 패턴이 적용되기는 쉽지 않다. 안드로이드에서는 View(화면) 와 Model (데이터 셋)의 사이를 연결해주는 역할로 어댑터가 사용되는데, View 에게 더 많이 의존하기 때문이다.

그래서 MVP 패턴으로 구조 바꾸려고 했을 때 어댑터를 어떤 패키지에 넣어줘야 하나 고민했던 기억이 있다..!!

안드로이드에서의 어댑터가 하는 일은 데이터 아이템에 접근할 수 있도록 해주고, 아이템의 뷰를 그리는 역할도 담당하고 있다. 종류는 크게 3개로 나눠진다.

  1. android.widget.Adapter 인터페이스를 구현한 어댑터들 : SpinnerAdapter, ListAdapter
  2. android.widget.BaseAdapter 추상 클래스를 상속받은 어댑터들 : ArrayAdapter, CursorAdapter, SimpleAdapter, RemoteViewsAdapter...
  3. Adapter를 독자적으로 구현한 경우 : RemoteViewsService.RemoteViewsFactoryAdapter, RecycleView.Adapter

참고 : 안드로이드의 어댑터(Adapter)

'Programming > Design pattern' 카테고리의 다른 글

[Design pattern] Factory method pattern  (0) 2021.07.05
[Design pattern] Singleton pattern  (0) 2019.01.02
[Design pattern] Builder pattern  (0) 2019.01.02
[Design pattern] Observer pattern  (0) 2019.01.02