Java, Kotlin Interoperability 해결하기

2024. 11. 18. 22:55·Language/Kotlin
728x90
반응형

이번 글은 최근 Java -> Kotlin 변환과

Java 클래스에서 Kotlin 클래스를 사용하면서 겪은 이슈를 공유해본다.

 

문제 상황 설명

먼저 Java 클래스를 Kotlin 클래스로 변경했다.

 

이 때 특정 변수는 자료형을 변경하면서까지 리팩토링을 진행했다.

 

그리고 다시 변경한 Kotlin 클래스를 Java 클래스에서 사용하는 부분이 필요했다.

(아래처럼 말이다)

class SomeData {
	var a: UInt = 0
    var b: Int = 0
}
public class User {
	public void someMethod() {
    	SomeData someData = new SomeData();
        someData.getB();
        someData.getA();
    }
}

 

Kotlin 변환을 마친 클래스를 마구 호출하다보니 갑자기 마주한 에러..

 

그는 실행 전에 찾아오지 않고 컴파일 타임에 찾아왔다..

Cannot find symbol get~()
Cannot find symbol set~()

 

그래서 Invalidate caches, clean & rebuild까지 몇번을 해봤는지도 모르겠다.

 

문제 발생 원인은?

다들 코틀린 공부할 때 들어봤을만한 말이 있다.

 

코틀린은 자바와 완벽히 호환된다.

 

이러면 안되는 거잖아.. 라는 생각이 들었다.

 

여기서 간과한 부분은 내가 변경한 Kotlin 클래스에서 UInt를 사용하는 변수가 있었다.

 

하지만 Java 클래스에서 getter, setter를 호출하면 자바에서 해당 getter, setter를 찾지 못했다.

(위 코드블럭을 예시로 들자면 getA()에서 에러가 발생한다)

 

Java에는 UInt 자료형이 없기 때문이다.

 

해결은?

그래서 getter를 override하여 Int형을 리턴하도록 변경해주고,

setter를 override하여 Int형을 받을 수 있도록 변경해주면 정상적으로 실행이 가능했다.

class SomeData {
	var a: UInt
    
    fun getA(): Int {
    	return a.toInt()
    }
    
    fun setA(input: Int) {
    	a = input.toUInt()
    }
}

 

이번 경험으로 인해 리팩토링 시 신경써야할 점이 하나 추가되었다.

 

Kotlin 변환 시 Java에 없는 자료형을 다룰 경우 별도 처리가 필요하다는 것이다.

 

 

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Language > Kotlin' 카테고리의 다른 글

Structured Concurrency in Coroutines  (1) 2025.01.19
Coroutines 여러 개로 연산 속도 높이기  (1) 2024.11.22
CoroutineScope와 CoroutineContext 되짚어보기  (0) 2024.09.21
withContext로 스레드 전환하기  (0) 2024.09.18
Coroutines Dispatcher 알아보기  (2) 2024.09.13
'Language/Kotlin' 카테고리의 다른 글
  • Structured Concurrency in Coroutines
  • Coroutines 여러 개로 연산 속도 높이기
  • CoroutineScope와 CoroutineContext 되짚어보기
  • withContext로 스레드 전환하기
BonusTrack02.dev
BonusTrack02.dev
공부, 일상
  • BonusTrack02.dev
    BonusTrack02.dev
    BonusTrack02.dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (237)
      • Android (84)
      • Language (63)
        • Java (19)
        • Kotlin (27)
        • Swift (17)
      • 프로그래머스 (68)
      • 주저리주저리 (22)
        • 카페 (5)
        • 음식점 (4)
        • 컨퍼런스 (1)
        • 팝업스토어 (4)
        • 해외여행 (0)
        • 전시회 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    programmers
    databinding
    티스토리챌린지
    LiveData
    오블완
    aac
    coroutines
    배열
    CodeLab
    코루틴
    안드로이드
    viewModelScope
    PCCE
    Kotlin
    Java
    Material
    프로그래머스
    MVVM
    android
    SWIFT
    getNumericValue
    room
    자바
    daterangepicker
    스위프트
    jetpack
    ios
    ViewModel
    Observer
    코틀린
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
BonusTrack02.dev
Java, Kotlin Interoperability 해결하기
상단으로

티스토리툴바