실전 reified 패턴: 파싱, DI 및 직렬화
JSON 파싱, 의존성 해결 및 리플렉션 도우미에 reified 제네릭을 적용해 보세요.
실전 reified 패턴: 파싱, DI 및 직렬화은(는) CoddyKit의 무료 Kotlin Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Kotlin Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Kotlin Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
세 가지 주요 사용 사례
구체화된 타입 매개변수는 Kotlin에서 반복적으로 등장하는 세 가지 패턴, 즉 JSON/데이터 구문 분석, 의존성 주입, 직렬화 도우미에서 특히 유용합니다. 각각 ::class.java 인수를 작성해야 하는 번거로움을 없애 줍니다.
패턴 1 — 타입 안전한 JSON 구문 분석
Gson 또는 Jackson을 구체화된 확장 함수로 감싸 호출자가 Class를 명시적으로 전달하지 않도록 합니다.
inline fun <reified T> String.parseJson(): T =
Gson().fromJson(this, T::class.java)
val user: User = jsonString.parseJson()컬렉션 구문 분석
제네릭 목록을 구문 분석하려면 TypeToken이 필요합니다. reified를 사용하면 이러한 복잡성을 숨길 수 있습니다.
inline fun <reified T> String.parseList(): List<T> {
val type = object : TypeToken<List<T>>() {}.type
return Gson().fromJson(this, type)
}
val users: List<User> = jsonString.parseList()kotlinx.serialization 방식
kotlinx.serialization은 내부적으로 이미 reified를 사용합니다. 최상위 decodeFromString은 reified inline 함수인 serializer에 의존합니다.
val user = Json.decodeFromString<User>(jsonString)
// equivalent to: Json.decodeFromString(serializer<User>(), jsonString)패턴 2 — 서비스 로케이터 / DI
간단한 서비스 로케이터는 호출자가 KClass를 전달하지 않아도 타입으로 의존성을 확인할 수 있습니다.
object ServiceLocator {
val registry = mutableMapOf<KClass<*>, Any>()
inline fun <reified T : Any> get(): T =
registry[T::class] as? T ?: error("No binding for ${T::class}")
inline fun <reified T : Any> bind(instance: T) {
registry[T::class] = instance
}
}Android에서 ViewModel 가져오기
Android에서 가장 일반적인 구체화 패턴은 다음과 같습니다.
inline fun <reified VM : ViewModel> ComponentActivity.viewModel(): VM =
ViewModelProvider(this)[VM::class.java]
// Usage
val vm: MyViewModel by lazy { viewModel() }패턴 3 — 안전한 형 변환 도우미
대체 처리가 있는 구체화된 형 변환 도우미를 사용하면 모든 곳에서 명시적으로 as?를 사용하는 것보다 코드가 더 깔끔해집니다.
inline fun <reified T> Any?.safeCast(): T? = this as? T
val name: String? = someAny.safeCast<String>()컬렉션의 타입 확인
표준 filterIsInstance는 대표적인 구체화 컬렉션 필터입니다. 이를 기반으로 더 높은 수준의 변형을 만들 수 있습니다.
inline fun <reified T> List<Any>.onlyInstancesOf(block: (T) -> Unit) =
filterIsInstance<T>().forEach(block)
items.onlyInstancesOf<Button> { it.setEnabled(true) }타입별 이벤트 리스너 등록
이벤트 버스는 reified를 사용하면 타입에 따라 이벤트를 전달하기 편리해집니다.
class EventBus {
val handlers = mutableMapOf<KClass<*>, (Any) -> Unit>()
inline fun <reified E : Any> on(noinline handler: (E) -> Unit) {
handlers[E::class] = { handler(it as E) }
}
fun post(event: Any) = handlers[event::class]?.invoke(event)
}구체화와 확장 함수 결합하기
제네릭 수신 객체에 구체화된 확장 함수를 사용하면 타입 안전성을 유지하면서 API를 유창하게 사용할 수 있습니다.
inline fun <reified T : Any> SharedPreferences.get(key: String, default: T): T = when (T::class) {
Int::class -> getInt(key, default as Int) as T
String::class -> getString(key, default as String) as T
Boolean::class -> getBoolean(key, default as Boolean) as T
else -> error("Unsupported type ${T::class}")
}기억해야 할 제한 사항
기억하세요. reified는 inline 함수에서만 작동합니다. 클래스와 인터페이스에는 구체화된 타입 매개변수를 사용할 수 없습니다. 클래스에서 런타임 타입 정보가 필요하다면 대신 KClass 속성을 저장하세요.
구체화된 도우미 테스트하기
구체화된 함수는 간단하게 테스트할 수 있습니다. 단위 테스트에서 구체적인 타입 인수와 함께 호출한 다음 출력 타입과 값을 확인하면 됩니다. 클래스 참조를 모의 처리할 필요가 없습니다.
val result: List<String> = """["a","b","c"]""".parseList<String>()
assertEquals(listOf("a","b","c"), result)빠른 확인
구체화된 함수에 관한 설명 중 올바른 것은 무엇인가요?
요약: 실용적인 구체화 패턴
핵심 패턴:
- JSON 구문 분석: Class/TypeToken 인수를 숨깁니다
- DI/서비스 로케이터: KClass 매개변수 없이 타입으로 의존성을 확인합니다
- 안전한 형 변환 및 컬렉션 필터링
- 이벤트 타입에 따른 이벤트 버스 전달
- SharedPreferences / 타입이 지정된 키-값 저장소
자주 묻는 질문
“실전 reified 패턴: 파싱, DI 및 직렬화” 강의는 무료인가요?
네 — “실전 reified 패턴: 파싱, DI 및 직렬화” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Kotlin Academy 강의 전체를 잠금 해제할 수 있습니다. Kotlin Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“실전 reified 패턴: 파싱, DI 및 직렬화”에서 뭘 배우나요?
JSON 파싱, 의존성 해결 및 리플렉션 도우미에 reified 제네릭을 적용해 보세요. 브라우저에서 직접 실행하는 실습 코드로 Kotlin Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Kotlin Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Kotlin Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“실전 reified 패턴: 파싱, DI 및 직렬화” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Kotlin Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Kotlin Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- inline 함수: 람다 오버헤드 제거하기
- noinline과 crossinline 수정자
- reified 타입 매개변수: 실행 중 T에 접근하기
- 실전 reified 패턴: 파싱, DI 및 직렬화