android studio ver. 3.1.2


아래와 같이 하나의 List, 반복문 하나를 작성하였습니다.

public class JavaExample { static List<String> data = new ArrayList<>(); public static void setDataLoop() { data.clear(); data.add("trip"); data.add("store"); data.add("extriber"); for (int i=0;i < data.size();i++) { Log.d("trip_", "java - loop "+i+" , "+data.get(i)); } } }

코틀린 변환

override fun onClick(v: View?) { when(v?.id) { R.id.iv -> { JavaExample.setDataLoop() setDataLoop() } } } private val data = ArrayList<String>() private fun setDataLoop() { data.clear() data.add("trip") data.add("store") data.add("extriber") for (i in data.indices) { Log.i("trip_", "kotlin - loop " + i + " , " + data[i]) } }

뭐 비슷하게 변환이 되었고, 크게 바뀌는 부분은 없어요.

결과화면은 아래 이미지




별거 없어보여서 데이터 가져오는 부분을 한번 추가, 테스트해 봤어요

public static String getData(int index) {
        if(data != null) {
            if(data.size() > 0) {
                return data.get(index);
            }
        }
        return null;
    }

코틀린 변환

override fun onClick(v: View?) { when(v?.id) { R.id.iv -> { JavaExample.setDataLoop() setDataLoop() Log.d("trip_", "java - getData : " + JavaExample.getData(1)) Log.i("trip_", "kotlin - getData : " + getData(1)) } } } private fun getData(index: Int): String? { if (data!!.size > 0) { return data!![index] } return null }


결과화면 이미지







android studio ver. 3.1.2



아래의 이미지처럼 오른탭에 Java 로 먼저 구현하고,
(메뉴) Code > Convert Java File Kotlin File 를 선택하면 코틀린으로 변환이 되지만,

절대 프로젝트 전체를 이런식으로 변화해서 쓰시면 안됩니다. 정식버전이긴 하지만 아직 오류도 있을 수 있고,

코틀린에 아직 능숙하지 않다면 전체 변환은 비추입니다.






1. Method 생성 ( 간단하게 두 인자를 받아서 String 으로 return 해 주었습니다.)

public static String setData(int num, String name) {
        return num + " , "+ name;
    }

코틀린 변환

private fun setData(num: Int, name: String): String {
        return num.toString() + " , " + name
    }

결과


여기서 Int 만 반환하고 싶다 라고 하면 아래와 같이 응용이 가능합니다.

private fun setData(num: Int, name: String): /*String*/Int {
        //return num.toString() + " , " + name
        return num
    }


2. if 예제 (스트링 비교, int 비교, boolean 비교)

public static void setCheck(String name, int num, boolean check) {
        if(name.equalsIgnoreCase("test")) {
            Log.d("trip_", "java - setCheck : in if");
        } else {
            Log.d("trip_", "java - setCheck : in else");
        }

        if(num == 1) {
            Log.d("trip_", "java - num == 1");
        } else {
            Log.d("trip_", "java - num != 1");
        }

        if(check) {
            Log.d("trip_", "java - check true");
        } else {
            Log.d("trip_", "java - check false");
        }
    }

코틀린 변환

private fun setCheck(name: String, num: Int, check: Boolean) {
        if (name.equals("test", ignoreCase = true)) {
            Log.i("trip_", "kotlin - setCheck : in if")
        } else {
            Log.i("trip_", "kotlin - setCheck : in else")
        }

        if (num == 1) {
            Log.i("trip_", "kotlin - num == 1")
        } else {
            Log.i("trip_", "kotlin - num != 1")
        }

        if (check) {
            Log.i("trip_", "kotlin - check true")
        } else {
            Log.i("trip_", "kotlin - check false")
        }
    }

결과



Null 을 받아서 처리를 해야할 경우도 생길수가 있는데 해당 부분은 
아래와 같이 ? 만 추가 해주면 가능합니다.


private fun setCheck(name: String?, num: Int, check: Boolean) {






android studio ver. 3.1.2


많은  안드로이드 유명 앱서비스들이 java 에서 코틀린으로 넘어가고 있다고 하므로,

개발은 트랜드기 때문에 따라가야하는 것 아니겠습니까

이번에는 findViewById 및 onClickListener 예제를 살펴보겠습니다.



먼저 SplashActivity.java 를 만들어서 자바 코딩으로 Imageview를 불러와서 onClick 의 로그를 찍어 보았습니다.

당연한 이야기 이겠지만, SplashActivity.java 와 SplashActivity.kt 가 각각 만들어진다고 해도, 빌드시에는 같은 클래스로 인식하므로
_java 라고 따로 이름을 다르게 지정하였습니다.


그럼 다음과 같이 코드를 컨버팅 해보았습니다. 약간 문법이 달라진 것 외에는 비스무리하게 생겨서

크게 이질감도 들지 않고, 조금의 공부를 하면 능숙하게 잘 다룰수 있을 것 같네요


class SplashActivity : AppCompatActivity(), View.OnClickListener {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_splash)

        val v = findViewById(R.id.iv)
        v.setOnClickListener(this)
    }

    override fun onClick(v: View?) {
        when(v?.id) {
            R.id.iv -> {
                Log.d("trip_", "iv click")
            }
        }
    }
}


맨 위의 이미지 처럼 log도 onclick 도 제대로 되는군요!

+ Recent posts