Kotlin에서의 어댑터 패턴
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
앱 개발
대상자
- Kotlin 및 Android 개발자, 특히 UI 구성 및 데이터 바인딩을 다루는 중급 이상 개발자
- 설계 패턴과 Android의 RecyclerView 이해가 필요한 분야
- 난이도: 중급 (설계 패턴 및 인터페이스 호환성 개념 필요)
핵심 요약
- 어댑터 패턴은 불일치한 인터페이스 간 협업을 가능하게 하는 구조적 설계 패턴
Client
→Adapter
→Adaptee
의 3단계 구조CardReader
인터페이스와SpecificMediaReader
추상화를 통해 다형성 구현- RecyclerView 어댑터는 데이터를
ViewHolder
로 변환하여 효율적인 UI 렌더링 가능 UserAdapter
클래스에서onCreateViewHolder
및onBindViewHolder
메서드 활용- 장점: 기존 코드 수정 없이 재사용성 향상, 유산 코드 호환성 확보
- 단점: 복잡성 증가, 인스턴스 생성 및 관리 오버헤드
섹션별 세부 요약
1. 어댑터 패턴 개념 및 예시
- 어댑터 패턴 구성 요소
Client
:MediaReader
클래스 (호환되지 않는Adaptee
사용 필요)Adapter
:MediaAdapter
클래스 (클라이언트와Adaptee
연결)Adaptee
:MicroSDReader
,MiniSDReader
,FlashdiskReader
등 다형성 지원- 인터페이스 설계
CardReader
인터페이스:read(cardType: String, fileName: String)
메서드 정의SpecificMediaReader
추상화:read(fileName: String)
메서드 공통화- 사용 예시
```kotlin
class CardReaderAdapter : CardReader {
override fun read(cardType: String, fileName: String) {
val reader = when (cardType) {
"microsd" -> MicroSDReader()
"minisd" -> MiniSDReader()
"flashdisk" -> FlashdiskReader()
else -> null
}
reader?.read(fileName)
}
}
```
2. Android RecyclerView 어댑터 구현
- ViewHolder 기반 데이터 바인딩
UserViewHolder
클래스에서TextView
요소 정의UserAdapter
클래스에서onCreateViewHolder
및onBindViewHolder
구현- 데이터 클래스 정의
```kotlin
data class User(val name: String, val age: Int)
```
- UI 렌더링 과정
UserAdapter
가item_user.xml
레이아웃을 통해User
객체를TextView
에 매핑
결론
- 어댑터 패턴 적용 팁: 기존 코드 수정 없이 새로운
Adaptee
추가 가능 (예:BluRayReader
추가 시when
문만 수정) - RecyclerView 어댑터 최적화:
ViewHolder
재사용과diffUtil
활용으로 성능 향상 - 핵심 원칙: 인터페이스 호환성 확보, 재사용성 강화, 유연한 시스템 설계