티스토리 뷰

 Kotlin 을 사용하니.. Java로 개발이 싫어졌다! 라는 글을 읽은적이 있었습니다. 과연 이러한 코틀린의 매력이 무엇이길래 이런 이야기들이 나오는 것일까요?? 일반인의 입장에서 바라본 안드로이드 개발에서의 코틀린과 자바의 차이점을 간단하게 알아보겠습니다.


1. 처음 시작

 우선 저는 안드로이드 개발의 시작을 Java를 통해 배웠습니다. 이 때문인지 코틀린으로 개발시 자바로의 개발이 싫어졌다... 라는 의견이 훨씬 와닿았습니다. 하지만 코틀린이 편하다고해서 안드로이드의 시작을 코틀린으로 시작하는것은 좋지 않다고 생각합니다. 간단한 저의 의견으로는 코틀린으로 안드로이드 개발을 시작하면 '이게 왜 이렇게 작동하는 것일까?' 란 의문을 가졌을 경우 해답을 내릴 수 없기 때문입니다.( 코틀린은 기본적으로 람다식을 적용하기 때문에 그렇습니다.) 따라서 시작은 자바로 시작하고 후에 코틀린을 통해서 편함을 느끼는게 좋을 것 같습니다.!!!


2. 간단히 살펴보는 Java와 Kotlin의 다른점

 초보자 입장에서의 간단한 예제를 통해 Kotlin(코틀린)이 얼마나 매력적인지 그리고 왜 바로 코틀린으로 시작하는것은 좋지 않는 것인지 알아보도록 하겠습니다. 우선 아래의 코드들은 안드로이드에서 버튼 이벤트 처리를 하는데 필요한 코드입니다.


Java의 코드는 다음과 같습니다.


1
2
3
4
5
6
7
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        // 버튼 클릭시 이벤트
    }
});
cs


Kotlin의 코드는 다음과 같습니다.


1
2
3
button.setOnClickListener {
    // 버튼 클릭시 이벤트
}
cs


 Java와 비교해서 Kotlin의 코드가 무척 짧은 것을 볼 수 있습니다.. 물론 ButterKnife 같은 Bind 라이브러리를 사용하면 Java의 코드도 짧아지겠지만 우선 기본적인 문법을 기준으로 비교해보았습니다.

 Kotlin은 기본적으로 람다식을 제공하기 때문에 저렇게 짧아 질 수가 있습니다. 코틀린의 코드가 어떻게 람다식을 적용시켰는지 봐보겠습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
button.setOnClickListener(object : View.OnClickListener{
    override fun onClick(p0: View?) {
        // 버튼 클릭시 이벤트
    }
})
 
button.setOnClickListener({view: View? ->
     // 버튼 클릭시 이벤트
})
 
button.setOnClickListener(){view : View? ->
    // 버튼 클릭시 이벤트
}
 
button.setOnClickListener{view : View? -> 
    // 버튼 클릭시 이벤트
}
 
button.setOnClickListener {
    // 버튼 클릭시 이벤트(view는 it으로 받을 수 있다)
}
cs


위의 5개의 Button 클릭 이벤트 들은 전부 같은 기능을 수행하는 코드들 입니다. Java와 같이 긴 코드에서 람다식을 적용해서 짧아진것을 볼 수 있습니다. 하지만 이정도 가지고는 Kotlin을 사용한다고 Java가 쓰기 싫어질 정도는 아니라고 생각되어집니다. 무엇이 더 있는지 알아보겠습니다.


간단한 예제를 위해서 Person이란 DTO(data class)를 만들어 보았습니다.


Java의 코드는 다음과 같습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
public class PersonJava {
    private String name;
    private int age;
    private int tall;
    private int person_id;
 
    public PersonJava(String name, int age, int tall, int person_id) {
        this.name = name;
        this.age = age;
        this.tall = tall;
        this.person_id = person_id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public int getAge() {
        return age;
    }
 
    public void setAge(int age) {
        this.age = age;
    }
 
    public int getTall() {
        return tall;
    }
 
    public void setTall(int tall) {
        this.tall = tall;
    }
 
    public int getPerson_id() {
        return person_id;
    }
 
    public void setPerson_id(int person_id) {
        this.person_id = person_id;
    }
}
 
cs


Person에 필요한 이름, 나이, 키, 아이디에 따른 생성자와 getter와 setter를 만들었습니다. 간단하지만 45줄이나 되는것을 볼 수 있습니다. 데이터를 표현하기 위해서 toString 등의 메소드를 Override 하려면 더 길어지게 될 것입니다. 그럼 다음으로 코틀린으로 작성된 코드를 보겠습니다.


Kotlin의 코드는 다음과 같습니다.


1
data class PersonKotlin(var name:String, var age:Int, var tall:Int, var person_id:Int)
cs


data로 class를 정의해 줌으로서 ( )에 있는 즉, 생성자 안에 매개변수만 정의해주면 자동으로 getter와 setter, toString등을 사용할 수 있게 해줍니다. 


Kotlin에서의 사용 코드는 다음과 같습니다.


1
2
3
4
5
6
7
var person = PersonKotlin("hellojdh",25,176,12345)
var name = person.name
var age = person.age
var tall = person.tall
var person_id = person.person_id
person.toString()
person.hashCode()
cs


Java에서의 사용 코드는 다음과 같습니다.


1
2
3
4
5
6
7
PersonKotlin person = new PersonKotlin("hellojdh",40,123,1234);
String name = person.getName();
int age = person.getAge();
int tall = person.getTall();
int person_id = person.getPerson_id();
person.toString();
person.hashCode();
cs


Kotlin으로 작성한 코드지만 Java와 잘 호환되는것을 볼 수 있습니다.


class가 data class 인것만 명시해 주었더니 Java에서 구현해야했던 것들을 구현하지 않아도 되는 Kotlin의 간편함을 볼 수 있었습니다.(꼭 data class로 명시하지 않고 그냥 class로 만들어도 사용 가능합니다.) 그렇다면 data class에서 inner class(nested class)는 어떻게 구현되는지 보겠습니다.


1
2
3
4
5
6
7
8
9
10
11
12
data class PersonKotlin(
        val name:String,
        val age:Int,
        val tall:Int,
        val person_id:Int,
        val cloth: Cloth
){
        data class Cloth(
                val pant: Int,
                val cloth: Int
        )
}
cs


간단히 () 뒤에 {}를 붙인뒤 선언해 주면 됩니다. 접근은 다음과 같이 해주면 됩니다.


1
2
3
var person = PersonKotlin("hellojdh",123,456,12345,PersonKotlin.Cloth(1,2))
var pant = person.cloth.pant
var cloth = person.cloth.cloth
cs


마지막으로 Java와 Kotlin의 차이점을 하나 더 살펴보겠습니다. 변수를 만든 뒤 해당 변수를 출력하는 코드를 작성해 보겠습니다.


Java의 코드는 다음과 같습니다.


1
2
3
String ex1 = "예제입니다.";
int ex2    = 1;
System.out.println("예제의 결과는 :: "+ex1+" 숫자는 :: "+ex2);
cs


Kotlin의 코드는 다음과 같습니다.


1
2
3
var ex1 = "예제입니다."
var ex2 = 1
println("예제의 결과는 :: $ex1 숫자는 :: $ex2")
cs


Jquery와 같이 $을 통해서 간단하게 변수를 사용할 수 있습니다. data class 처럼 한 단계 거처야 할 경우는 ${}을 통해서 다음과 같이 사용할 수 있습니다.


1
2
var person = PersonKotlin("hellojdh",123,456,12345,PersonKotlin.Cloth(1,2))
println("이름은 ${person.name} 이며, 나이는 ${person.age} 입니다.")
cs


+를 사용하지 않아도되므로 깔끔하게 코드를 작성할 수 있었습니다.


마무리


최근 Kotlin을 사용해서 코딩을 하면서 간편하다 느꼇던 부분들을 짧게 정리해 보았습니다. 어느분의 말처럼 코틀린을 사용하니 Java를 사용하기 싫어졌다... 란 말이 나올 수도 있겠지만 기본적인 부분을 이해하는데는 Java로의 실습이 꼭 필요합니다. 좀 더 사용을 해보면서 비교할 부분을 다시 비교해보겠습니다.


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday