# Maguyva의 Kotlin 지원: Android와 JVM을 위한 코드 그래프

Canonical source: https://maguyva.ai/ko/languages/kotlin

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

Maguyva는 AST, 심볼, 그래프로 Kotlin을 지원하여, AI 에이전트가 Android와 JVM 코드 전반에서 클래스, 확장 함수, 코루틴을 따라갈 수 있게 합니다.

## 지원 현황 요약

- 등급: AST 및 심볼 지원
- 프로그래밍
- 확장자: .kt, .kts
- 구문 인식 검색과 구조적 컨텍스트를 위한 실제 AST 파싱을 제공합니다.
- 이름이 지정된 심볼은 시맨틱 조회와 상호 참조에 활용됩니다. 관계 추출이 활성화된 경우 그래프 내비게이션을 사용할 수 있습니다.
- 이 언어는 그래프 인식 검색에 심볼과 관계를 제공합니다. 지원되는 에지 유형은 언어 고유의 구문 구조에 따라 다릅니다.
- AST 파싱과 심볼 추출을 모두 지원합니다.

## 가장 적합한 경우

- ViewModel, 리포지토리, 유스케이스가 모듈을 넘나들며 서로 호출하는 대규모 멀티 모듈 앱을 가진 Android 팀.
- Kotlin과 오래된 Java 코드가 섞여 있는 서버 사이드 Kotlin 및 Kotlin/JVM 서비스.
- 에이전트가 애플리케이션 코드와 함께 읽어야 하는, Kotlin 스크립트(`.kts`)로 작성된 Gradle 빌드.

## 에이전트 워크플로

- 리포지토리나 유스케이스 클래스의 API를 바꾸기 전에 모든 호출자를 찾습니다.
- ViewModel의 `launch`에서 `withContext`를 거쳐 데이터 계층까지 코루틴 흐름을 추적합니다.
- 리팩터링 전에 어떤 클래스가 인터페이스를 구현하거나 베이스 메서드를 오버라이드하는지 매핑합니다.

## Kotlin이 얕은 AI 도구를 넘어뜨리는 지점

Kotlin이 간결한 이유는 연결을 숨기기 때문입니다. `apply`, `let`, `also`, `run`, `with`는 `this`와 `it`의 의미를 바꿉니다. 확장 함수는 다른 곳에서 정의된 타입에 동작을 붙입니다. 코루틴은 `launch`, `async`, `withContext`를 오가며 작업을 옮깁니다. 파일을 하나씩 읽는 에이전트는 호출은 보지만 그 뒤의 리시버는 보지 못합니다.

Maguyva는 인덱싱 시점에 그런 구조를 더 많이 해석하므로, 에이전트가 함수의 호출자를 물으면 진짜 답을 얻습니다.

## Maguyva가 Kotlin에서 추출하는 것

Maguyva는 `.kt`와 `.kts`를 지원합니다. 함수, 클래스, 객체, 컴패니언 객체가 추출되고, 함수 시그니처에는 확장 리시버, 매개변수 이름, 기본값, `vararg` 매개변수가 기록됩니다.

호출 관계는 클래스 한정 이름을 유지하므로, `OrderRepository.save`는 다른 `save`와 구별됩니다. 리시버 타입 추론은 `apply`와 `run` 안의 `this`, `let`과 `also` 안의 `it`, 그리고 `with`의 인자를 따라가므로, 스코프 함수 안의 호출도 올바른 타입으로 해석됩니다. 코루틴 빌더와 Flow 연산자(`launch`, `async`, `withContext`, `coroutineScope`, `supervisorScope`, `flow`, `emit`, `delay`, `Channel`)는 의도적으로 그래프에 남겨 둡니다.

그래프에는 상속, 인터페이스 구현, 오버라이드, 인스턴스화, 어노테이션, 타입 참조, 읽기와 쓰기, 예외 throw와 catch 엣지도 기록됩니다.

## 에이전트 프롬프트 예시

- "`CheckoutUseCase.invoke`를 누가 호출하고, 어떤 ViewModel에서 호출하나요?" (`find_symbol`, 그다음 `dependency_search` incoming)
- "`SyncWorker`에서 네트워크 클라이언트까지 동기화 흐름을 추적해 줘." (`get_task_context`)
- "`PaymentGateway`를 구현하는 클래스는 무엇인가요?" (`dependency_search`)

## 알려진 한계

- 약 250개의 Kotlin 표준 라이브러리 및 플랫폼 호출은 관계에서 걸러지므로, `listOf`, `map`, `filter`, `println` 같은 헬퍼는 그래프 엣지가 아닙니다. 이런 호출에는 `text_pattern_search`를 사용하세요.

## 다음 단계

[빠른 시작](/ko/docs/quickstart)으로 저장소를 연결한 다음, [호환성 페이지](/ko/docs/compatibility)에서 지원 매트릭스를 확인하세요. 혼합 코드베이스라면 [Java 가이드](/ko/languages/java)도 읽어 보세요.

## 엔진 세부 정보

- Kotlin 지원은 `.kt`와 `.kts`를 포함합니다. 시그니처에는 확장 리시버, 매개변수 이름, 기본값, `vararg` 매개변수가 기록됩니다.
- 리시버 타입 추론은 `apply`와 `run` 안의 `this`, `let`과 `also` 안의 `it`, `with`의 인자를 따라가며, 호출은 클래스 한정 이름을 유지합니다.
- `launch`, `withContext`, `flow` 같은 코루틴 빌더와 Flow 연산자는 그래프에 남고, 약 250개의 표준 라이브러리 호출은 걸러집니다.

## 유용한 MCP 진입점

- `find_symbol`: 정의와 참조가 필요할 때 클래스, 유스케이스, 확장 함수로 쓰세요.
- `dependency_search`: API를 바꾸기 전에 리포지토리나 인터페이스에 incoming 탐색을 써서 호출자와 구현 클래스를 확인하세요.
- `get_task_context`: “`SyncWorker`에서 네트워크 클라이언트까지 동기화 흐름을 추적해 줘” 같은 프롬프트에 쓰세요.
