자바와 비교하여 코틀린의 특징이 무엇이고 어떠한 점이 더 나은지 살펴보겠다.
- 간결한 문법
문장 끝에 세미콜론(;)을 붙이지 않아도 된다.
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 안정성
코틀린에서는 기본적으로 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 지원
코틀린에서는 스트림 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 키워드를 통해 함수를 선언한다.
또한, 리턴 타입을 함수명 뒤에 콜론(:)을 붙이고 선언한다.
이 글은 차세대 안드로이드 개발자를 위한 커니의 코틀린 책을 참고하였다.