JVM signature error 란?

박병준·2024년 5월 20일

kotlin 공부

목록 보기
1/1
post-thumbnail

코틀린으로 확장 함수를 작성시 자주 만나는 친구에 대해 알아보자.

평소에 mapper 를 만들고 나서 실행 전까지 아무 이상이 없다가 빌드시 등장하는 친구다.

왜 발생할까?

  • 문제는 발생하는 이유는 패키지에 같은 함수라는 것이다.

실제로 JVM에서 빌드시 함수의 이름, 매개변수를 가지고 결정을 하는데 여러분들도 알다싶이 코틀린에서는 그렇지 않다. 코틀린은 확장함수를 통해 편의성을 제공한다. 하지만 JVM위에서 작동하기에 해당 이슈가 발생하는 것이다.
Platform declaration clash: The following declarations have the same JVM signature (toModels(Ljava/util/List;)Ljava/util/List;):

해결방법

kotlin.jvm 에서 제공하는 @JvmName() 어노테이션을 통해 해결할 수 있다.
실제 함수의 이름은 변경하지 않고 @JvmName()을 다는 것 만으로 JVM에서 서로 다른 이름의 함수로 인식해 문제를 해결한다.


느낌점

안드로이드를 할 때 크게 JVM에 대해 생각은 하지 않았는데, 이번 계기로 JVM에 대해 깊게 공부해야겠다고 느꼈다.

profile
앱 개발자 박병준입니다.

0개의 댓글