android studio ver. 3.1.2


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<p><font face="맑은 고딕, sans-serif"><span style="font-size: 14.6667px;">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));
        }
    }
}</span></font></p>

코틀린 변환

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<p><font face="맑은 고딕, sans-serif"><span style="font-size: 14.6667px;">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])
        }
    }</span></font></p>

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

결과화면은 아래 이미지




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

1
2
3
4
5
6
7
8
public static String getData(int index) {
        if(data != null) {
            if(data.size() > 0) {
                return data.get(index);
            }
        }
        return null;
    }<p></p>
코틀린 변환
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<p>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
    }
</p>

결과화면 이미지







android studio ver. 3.1.2



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

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

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






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

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

코틀린 변환

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

결과


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

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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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");
        }
    }

코틀린 변환

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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 을 받아서 처리를 해야할 경우도 생길수가 있는데 해당 부분은 
아래와 같이 ? 만 추가 해주면 가능합니다.


1
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 라고 따로 이름을 다르게 지정하였습니다.


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

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


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class SplashActivity : AppCompatActivity(), View.OnClickListener {
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_splash)
 
        val v = findViewById<imageview>(R.id.iv)
        v.setOnClickListener(this)
    }
 
    override fun onClick(v: View?) {
        when(v?.id) {
            R.id.iv -> {
                Log.d("trip_", "iv click")
            }
        }
    }
}
</imageview>


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

+ Recent posts