라이브러리 종류?

MSU·2026년 8월 11일

Android

목록 보기
40/42

안드로이드 라이브러리 선택 문서(https://developer.android.com/topic/performance/app-optimization/choose-libraries-wisely?hl=ko)를 보면서 Reflection? Code Generation? 이런 용어가 나오길래 개념 정리가 필요한거 같아 여기에 정리해본다.

라이브러리 분류

안드로이드 라이브러리 (Android Libraries)
│
├── 1. 일반 라이브러리 (Static / Executable)
│   │  - 빌드 시점에 코드를 새로 생성하지 않고, 미리 완성된 클래스/메서드를 직접 호출
│   │
│   ├── 네트워크 통신 (HTTP Client)
│   │   └── OkHttp, Ktor Client
│   │
│   └── 이미지 로딩 (Image Loading)
│       └── Glide, Coil, Picasso
│
└── 2. 메타데이터 기반 라이브러리 (Metadata-driven)
    │  - 어노테이션(@) 등을 읽어 보일러플레이트 코드를 대신 처리
    │
    ├── 🅰️ 리플렉션 기반 (Reflection-based)
    │   │  - 런타임(앱 실행 중)에 클래스 구조를 탐색하여 동작
    │   │  - ⚠️ 특징: 성능/배터리 영향, 초기 로딩 지연, 컴파일 타임 에러 감지 불가
    │   │
    │   ├── JSON 직렬화 (JSON Parsers)
    │   │   ├── Gson
    │   │   └── Jackson (기본 설정)
    │   │
    │   └── 이벤트 버스 (Event Bus)
    │       └── EventBus (초기 버전)
    │
    └── 🅱️ 코드 생성 기반 (Code Generation-based) 🌟 [권장]
        │  - 컴파일 타임(앱 빌드 중)에 KSP / Compiler Plugin으로 맞춤형 코드 파일 생성
        │  - ✨ 특징: 압도적인 런타임 속도, 컴파일 시점 에러 감지, R8/ProGuard 안전
        │
        ├── JSON 직렬화 (JSON Parsers)
        │   ├── Moshi (Codegen / KSP)
        │   └── Kotlinx.Serialization (Kotlin Compiler Plugin)
        │
        ├── 데이터베이스 (Database / ORM)
        │   └── Room (KSP)
        │
        ├── 의존성 주입 (Dependency Injection)
        │   ├── Hilt (KSP / Gradle Plugin)
        │   └── Dagger2 (KAPT / KSP)
        │
        ├── UI & 뷰 바인딩 (UI / View Binding)
        │   ├── ViewBinding
        │   └── DataBinding
        │
        └── 네트워크 인터페이스 (REST Client)
            └── Retrofit (인터페이스를 분석해 런타임 프록시 및 코드 연결)```

질문

일반적으로 생각하는 라이브러리는 만들어진 코드를 사용하기만 하면 되는데, 리플렉션이나 코드생성기반 라이브러리는 런타임이나 컴파일 시점에 동작하는 이유가 뭐지?

그 이유는 라이브러리 개발자는 '내가 만들 앱의 코드(개발자가 작성한 클래스, 변수, 어노테이션)'가 무엇인지 미리 알 수 없기 때문임.
내가 만들 클래스나 SQL문을 라이브러리 개발자가 어떻게 아는가?
개발자가 모든 코드를 작성하고난 후 빌드 시점에 소스파일이 생성되거나 런타임에 코드를 읽고 필요한 동작이 수행됨.

빌드 도구

APT (Annotation Processing Tool) / KAPT

Java/Kotlin 환경에서 컴파일 타임에 어노테이션을 읽어 코드를 생성해 주던 대표적인 빌드 도구입니다. (현재는 속도 문제로 KSP로 대체되는 추세)

KSP (Kotlin Symbol Processing)

구글과 젯브레인(Jetbrains)이 만든 Kotlin 전용 차세대 코드 생성 도구입니다.

KAPT 대비 분석 및 코드 생성 속도가 훨씬 빠르며, 최신 안드로이드 라이브러리(Room, Moshi 등)의 표준으로 자리 잡았습니다.

profile
안드로이드공부

0개의 댓글