Kotlin → XML 변환기
Kotlin data class나 인스턴스를 붙여넣으세요. 깔끔한 XML을 돌려드립니다.
이 도구가 하는 일
Kotlin data class용 XML 페이로드를 직접 손으로 작성해본 적이 있다면 — Android 리소스 파일, 아직 대체되지 않은 SOAP 엔드포인트, 통합 테스트 픽스처용으로 — 얼마나 타이핑이 귀찮은지 아실 겁니다. 여기에 Kotlin을 붙여넣으면 잘 형성된 XML을 한 번에 돌려받습니다. 단일 data class, 여러 data class와 sealed class가 들어 있는 파일, 값이 채워진 val order = Order(...) 인스턴스 — 결과는 같습니다: 모든 프로퍼티를 보존한 완전한 XML 문서입니다.
단순한 문자열 치환이 아닙니다. 이 변환기는 Kotlin이 실제로 XML로 직렬화되는 방식을 알고 있으며 — 대략 kotlinx.serialization이 처리하는 방식과 같습니다. BigDecimal 값은 순수 숫자 텍스트로, Instant와 LocalDateTime은 ISO-8601 문자열로, 값이 null인 nullable은 빈 요소로, List<T>와 Map<K,V>는 일관된 컨테이너 형태를 따릅니다 — 각 리스트는 래퍼 요소가 되고 요소 타입 이름을 가진 자식이 아이템마다 하나씩 들어갑니다.
직렬화 어노테이션도 존중합니다. 프로퍼티의 @SerialName("x")는 출력 요소 이름을 바꾸고, @Transient는 프로퍼티를 제거하며, 클래스 레벨의 @SerialName("x")는 감싸는 루트 요소의 이름을 바꿉니다. sealed class 계층은 타입 디스크리미네이터로 평탄화되어 나중에 라운드트립할 수 있습니다. 여러 data class를 붙여넣으면 각각이 중첩 타입을 확장하고 기본값을 채운 상태로 출력에 나타납니다. 깊이 있는 버전이 궁금하다면 Kotlin 직렬화 공식 문서를 읽어볼 만합니다.
사용 방법
세 단계입니다. 다섯 줄을 붙여넣든 모델 파일 전체를 붙여넣든 동일하게 동작합니다.
Kotlin 붙여넣기 (또는 샘플 사용)
왼쪽 에디터에 Kotlin을 그대로 던져 넣으세요. data class, sealed class 계층, 값이 채워진 val 인스턴스, 여러 클래스가 든 파일 — 모두 괜찮습니다. 실제 예시를 먼저 보고 싶다면 샘플 불러오기를 클릭하세요.
import 문을 제거하거나 어노테이션을 지우거나 Kotlin 구문을 정리할 필요 없습니다. IDE에서 보이는 모습 그대로 두세요. 그냥 붙여넣으면 됩니다.
변환 클릭
녹색 변환 버튼을 누르세요. 도구가 Kotlin을 읽고 모든 클래스와 프로퍼티를 보존한 뒤 한 번에 XML을 만들어냅니다. 실행 중에는 짧은 로딩 표시가 나타납니다.
XML 복사
오른쪽 패널에 인덴트된 잘 형성된 XML이 채워집니다. 표준을 준수하는 XML 파서가 그대로 받아들일 수 있는 형식입니다. Android 리소스, SOAP 요청, 설정 파일, 테스트 픽스처에 바로 복사해 넣으세요.
실제로 유용한 순간
Android 레이아웃과 리소스 XML
<a href="https://developer.android.com/guide/topics/resources/providing-resources" target="_blank" rel="noopener">Android XML 리소스</a>에 매핑되는 Kotlin 모델 — 환경설정 화면, string-array, 커스텀 속성 세트 등. 클래스를 붙여넣고 XML을 받아서 res/xml이나 res/values에 붙여넣으세요.
JVM 위의 SOAP 클라이언트
Kotlin 요청 타입이 SOAP으로 앱을 떠나야 하는 상황. data class를 붙여넣고 XML 본문을 SoapUI나 Postman에 넣어 엔벨로프를 손으로 쓰지 않고 계약을 검증하세요.
테스트 픽스처 시드
유닛 테스트에서 사용하는 <code>val order = Order(...)</code> 인스턴스를 통합 테스트, 모크 서버, 아직도 XML을 쓰는 레거시 시스템용 XML 시드 파일로 바꿉니다.
문서와 코드 동기화
README, API 레퍼런스, XSD 기반 스키마 문서용 XML 예시를 실제 Kotlin 모델에서 바로 생성하세요. 문서가 코드와 어긋나지 않고 일치합니다.
자주 묻는 질문
여러 data class를 한 번에 붙여넣어도 되나요?
네 — 파일 전체를 붙여넣으세요. 최상위 data class와 sealed class는 모두 중첩 타입을 확장하고 기본값을 채운 상태로 나옵니다. 조용히 누락되는 건 없습니다.
@SerialName과 @Transient를 존중하나요?
네. 프로퍼티의 @SerialName("x")는 출력 요소 이름을 바꾸고, 클래스의 @SerialName("x")는 감싸는 루트 요소 이름을 바꾸며, @Transient는 프로퍼티를 완전히 제거합니다. kotlinx.serialization에서 얻는 동작과 동일합니다.
BigDecimal, Instant, nullable은 어떻게 처리되나요?
BigDecimal은 순수 숫자 텍스트로 나옵니다 (BigDecimal("...") 래퍼 없이). Instant와 LocalDateTime은 ISO-8601 문자열이 됩니다. null 값을 가진 nullable은 제거되지 않고 빈 요소가 되어, XSD에 대해 검증하는 컨슈머를 위해 형태가 일관되게 유지됩니다.
sealed class, list, map은요?
sealed class 계층은 타입 디스크리미네이터 속성으로 평탄화되어 라운드트립이 가능합니다. List<T>는 컨테이너 요소가 되고 각 아이템마다 요소 타입 이름을 가진 자식이 하나씩 들어갑니다 — List<OrderItem> items는 <items><OrderItem/><OrderItem/></items>가 됩니다. Map<K,V>는 <Entry><Key/><Value/></Entry>의 컨테이너가 됩니다.
제 코드가 저장되나요?
코드는 변환을 위해 백엔드로 전송되지만 저장하지 않습니다 — 페이로드를 로깅하지 않습니다. 온라인 도구가 다 그렇듯, 정말 민감한 코드라면 붙여넣기 전에 한번 훑어보세요.
companion object, 확장 함수, 코루틴 같은 특이한 게 있으면 어떻게 되나요?
companion object는 인스턴스 상태의 일부가 아니므로 XML 출력에서 무시됩니다. 확장 함수와 최상위 함수는 건너뜁니다. 코드 자체에 구문 오류가 있다면 명백한 것부터 먼저 고치세요 — 파서는 관대하지만 독심술사는 아닙니다.
함께 쓰면 좋은 도구
Kotlin → XML은 퍼즐의 한 조각입니다. 다음 도구들과 잘 어울립니다: