자바와 비교하여 코틀린의 특징이 무엇이고 어떠한 점이 더 나은지 살펴보겠다.
문장 끝에 세미콜론(;)을 붙이지 않아도 된다.
val tmp: String = "Hello"
객체를 생성할 때 new 키워드를 사용하지 않고 생성한다.
User user = new User();
(자바의 경우)
val user = User()
(코틀린의 경우)
타입 추론을 지원하기 때문에 일반적인 경우에는 타입을 적지 않아도 된다.
String str = "Hello";
int a = 10;
val str = "Hello"
val a = 10
위의 코드에서 자바는 타입을 적어줘야 한다.
하지만 코틀린에서는 타입을 적지 않아도 컴파일러가 자동으로 타입 추론을 해준다.
코틀린에서는 기본적으로 Null 값을 허용하지 않기 때문에 런타임에서 발생하는 오류를 줄일 수 있다.
val a = 10 // null 값을 허용하지 않는 Int 타입 변수
val str: String? = null // null 값을 허용하는 String 타입 변수
- var, val 키워드를 통해 가변/불변 구분
코틀린에서는 두 개의 키워드를 통해 변수의 가변/불변을 설정할 수 있다.
var 키워드는 할당된 변수를 변경할 수 있다.
val 키워드는 할당된 변수를 변경할 수 없다.
val 키워드는 자바에서 final 키워드와 유사한 기능을 한다고 볼 수 있다.
val a = 10
a = 20 // 컴파일 에러
var b = 200
b = 300 // 정상
안드로이드 스튜디오에서는 var 키워드 변수가 해당 클래스에서 변경되지 않으면 경고 메시지가 뜬다.
그렇기 때문에 변경되지 않는 변수라면 val 키워드를 쓰도록 하자.
코틀린에서는 람다식을 기본으로 지원하기 때문에 특별한 제약 없이 코드를 간소화할 수 있다.
안드로이드에서 자주 쓰는 onClickListener로 예를 들어보겠다.
Button button1 = (Button)findViewById(R.id.button1); // layout에 button1이 있다고 가정
button1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
Toast.makeText(this, "button을 클릭했습니다.", Toast.LENGTH_LONG).show();
}
});
button1.setOnClickListener{
Toast.makeText(this, "button을 클릭했습니다.", Toast.LENGTH_LONG).show()
}
자바와 비교하여 코드 수를 많이 줄여 가독성을 높일 수 있다.
코틀린에서는 스트림 API와 유사한 역할을 하는 함수들을 코틀린 표준 라이브러리를 통해 제공한다.
안드로이드 플랫폼 버전과 상관없이 사용할 수 있는 장점이 있다.
val items = listOf(10, 2, 3, 5, 6)
val sumofEvens = items.filter { it % 2 == 0}.sum()
스트림 지원과 관련해서는 추후에 더 자세히 다루도록 하겠다.
위에서 이미 자바와 다른 방법을 통해 변수를 선언했다.
자바에서는 타입을 먼저 적고 변수명을 그다음 적는다.
하지만 코틀린에서는 변수명을 먼저 적고 그 다음 타입을 적는다.(때에 따라서 타입 생략 가능)
자바와 코틀린의 큰 차이점 중 하나는 함수 선언 방법에 있다.
public int getAge(){
return 10;
}
fun getAge(): Int{
return 10
}
코틀린에서는 fun 키워드를 통해 함수를 선언한다.
또한, 리턴 타입을 함수명 뒤에 콜론(:)을 붙이고 선언한다.
이 글은 차세대 안드로이드 개발자를 위한 커니의 코틀린 책을 참고하였다.