android studio ver. 3.1.2
kotlin_version = 1.2.51
Util 과 같은 클래스 안에 static method 를 만들어 놓고,
전역에서 호출하여 사용할 수 있습니다. 코틀린은 static 이 없다고 하니, 펑션 만 만들어 줍니다.
public class Utils_j { public static void load(String value) { Log.i("trip_", "method load : "+ value); } }
코틀린으로 변환 해 보았습니다.
object Utils { fun load(value: String) { Log.i("trip_", "method load : $value") } } // 실행 override fun onClick(v: View?) { when(v?.id) { R.id.iv -> { Utils_j.load("java test") Utils.load("kotlin test") } } }
결과
여기까지는 kotlin file 에서 kotlin file 을 접근했을 때이고,
만약 java file > kotlin file 로 접근 해서 fun 호출 하게 되면 좀 더 다른점을 볼수 있어요.
Logger 라는 코틀린 파일을 만들어서 테스트를 진행 해보았습니다.
object Logger { private const val TAG = "trip_" /** Log Level Information */ fun i(vararg message: Any) { if (BuildConfig.DEBUG) Log.i(TAG, buildLogMsg(*message)) } /** Log Level Debug */ fun d(vararg message: Any) { if (BuildConfig.DEBUG) Log.d(TAG, buildLogMsg(*message)) } } // 자바에서 kotlin 펑션을 호출 @Override public void onClick(View v) { switch (v.getId()) { case R.id.iv: Logger.INSTANCE.d("kotlin input test"); break; } }
Logger.d 이런식으로는 사용이 안되게 되어 있고, INSTANCE 가 붙어서 싱글톤 형태여야 쓸 수 있는 의미가 됩니다.
그래서 전 그냥 Logger.d 로 쓰고 싶어요 한다면 여러가지 방법이 있겠습니다.
우선 아래 코드 처럼 object Logger { } 부분을 지우면
LoggerKt.d() 로 사용할 수가 있어요.
//object Logger { private const val TAG = "trip_" /** Log Level Information */ fun i(vararg message: Any) { if (BuildConfig.DEBUG) Log.i(TAG, buildLogMsg(*message)) } /** Log Level Debug */ fun d(vararg message: Any) { if (BuildConfig.DEBUG) Log.d(TAG, buildLogMsg(*message)) } //} // 자바에서 kotlin 펑션을 호출 @Override public void onClick(View v) { switch (v.getId()) { case R.id.iv: //Logger.INSTANCE.d("kotlin input test"); LoggerKt.d("kotlin input test"); break; } }
LoggerKt.d() 로 사용하는 것이 불편할 수 있습니다. 제가 그래요.
Logger.d() 로 쓰고 싶다면
아래 코드 처럼 @file:JvmName("Logger") 라고 추가 해주면 Logger.d() 의 형태로 사용 할 수 있게 되었습니다.
@file:JvmName("Logger") package example.kr.myapplication //object Logger { private const val TAG = "trip_" /** Log Level Information */ fun i(vararg message: Any) { if (BuildConfig.DEBUG) Log.i(TAG, buildLogMsg(*message)) } /** Log Level Debug */ fun d(vararg message: Any) { if (BuildConfig.DEBUG) Log.d(TAG, buildLogMsg(*message)) } //} // 자바에서 kotlin 펑션을 호출 @Override public void onClick(View v) { switch (v.getId()) { case R.id.iv: //Logger.INSTANCE.d("kotlin input test"); //LoggerKt.d("kotlin input test"); Logger.d("kotlin input test"); break; } }
'Android Kotlin' 카테고리의 다른 글
Android Kotlin - AlertDialog example (0) | 2018.08.17 |
---|---|
Android Kotlin - SwitchCompat example (0) | 2018.08.17 |
Android Kotlin - Variable declaration 변수 정의 (0) | 2018.07.25 |
Android Kotlin - list, for 예제 (0) | 2018.07.23 |
Android Kotlin - Method, if 예제 (1) | 2018.07.23 |