[안드로이드] 디자인 패턴(Design Pattern) 이란? 이전 Design Pattern 개념 정리에 이어서  구조(Structural) 에 해당하는 어댑터 패턴(Adapter Pattern) 에 대해 정리하려고 합니다.         1....

[안드로이드] 어댑터 패턴 (Adapter Pattern)

 

[안드로이드] 디자인 패턴(Design Pattern) 이란?

이전 Design Pattern 개념 정리에 이어서

 구조(Structural) 에 해당하는 어댑터 패턴(Adapter Pattern) 에 대해 정리하려고 합니다.

 

 

 

 

1. 어댑터 패턴 (Adapter Pattern)

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

 

기존에 사용하고 있는 라이브러리가 있는데 변경 사항이 생길 때 마다 라이브러리를 수정한다면 해당 라이브러리의 재 활용성이 현저히 떨어질 것입니다. 더군다나 공용으로 쓰고 있는 라이브러리라면 문제가 생길 수도 있습니다. 


어댑터 패턴 사용에 가장 큰 이유는 여기에 있습니다. 최대한 기존 코드를 유지하면서, 인터페이스를 활용하여 재활용을 가능하게 만들어 줄 것입니다. 단, Adapter Pattern 을 사용하기 위해 클래스가 많아지면서 복잡할 수 있고 상속을 사용하기 때문에 유연성이 떨어진다는 단점이 있습니다. (무조건 좋은 건 아니네요..)

 

 

 

 

2. 어댑터 패턴 (Adapter Pattern) 다이어그램

어댑터 패턴의 다이어그램을 통해 구성 요소를 살펴보겠습니다.


 

    ① Target : 인터페이스

    ② Client : Target 인터페이스를 요구하는 요소를 지닌 클래스

    ③ Adaptee : Client 의 Target 인터페이스를 요구하는 요소에 집어넣고 싶은 클래스

    ④ Adapter : Adaptee 클래스를 Target 인터페이스에 맞춰 주는 클래스

 

 

 

 

3. 어댑터 패턴 (Adapter Pattern) : RecyclerView

아래 코드는 RecyclerView.Adapter 를 상속받은 RecyclerAdapter 입니다.

getItemCount() 메서드를 주목해 보자면, RecyclerAdapter 클래스는 RecyclerView.Adapter 의 인터페이스 형태를 통해 getItemCount 메서드의 책임을 위임 받은 것을 확인 할 수 있습니다.

abstract class RecyclerAdapter(private val items: ArrayList<Item>) :
RecyclerView.Adapter<RecyclerAdapter.RecyclerViewHolder>() {

var mContext: Context? = null

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerViewHolder {
val v: View = LayoutInflater.from(parent.context).inflate(R.layout.item, parent, false)
mContext = parent.context
return RecyclerViewHolder(v)
}

override fun onBindViewHolder(holder: RecyclerViewHolder, position: Int) {

}

override fun getItemCount(): Int = items.size

class RecyclerViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
var id: TextView = itemView.findViewById(R.id.id)
}
}

 

RecyclerView 의 경우는 아래와 같이 정리 할 수 있습니다.

 

    ① Target : RecyclerView.Adapter

    ② Client : recyclerView

    ③ Adaptee : item

    ④ Adapter : recyclerAdapter

 

 

 


 

 

[참고자료]

Wikipedia

https://kscory.com/dev/design-pattern/adapter

 

 

 

 

0 comments: