코틀린은 Google I/O 2017에서 안드로이드의 공식 언어로 채택되었다. 그리고 이번에 다양한 회사에서 이제 코틀린으로 어플리케이션을 개발하고 있다. 필자는 Java를 통해 Android 개발을 하고 있었지만, 코틀린으로 개발하는 방향으로 코틀린 공부를 시작하였다.
//java
int x = 10;
//kotlin
val x: Int = 10
var x = 15
코틀린에는 2가지 변수 선언 방식이 존재한다.
val는 변할 수 없는 상수로 로컬 변수이다. 즉, 초기화 이후에는 값을 변경할 수 없다. 그리고 val는 꼭 초기화를 해주어야 한다.
//int 타입으로 x변수를 10으로 초기화
val x: Int = 10
//val 타입은 변수의 값 변경이 불가하여 오류가 발생
x = 15
//val 타입은 초기화 해주지 않으면 오류가 발생
val x: Int
var는 일반적인 변수로 변수의 값을 변경할 수 있다.
//int 타입으로 x 변수를 10으로 초기화
var x : Int = 10
//var 타입은 변수의 값을 변경 가능
x = 15
자바의 경우 아래와 같이 함수를 생성한다.
public int sum(int a, int b){
return a+b;
}
코틀린의 경우 아래와 같이 함수를 생성한다.
fun sum(a: Int, b: Int): Int{
return a+b
}
좀 더 단순하게 생성할 수도 있다.
fun sum(a: Int, b: Int) = a+b // 타입을 생략하여 바로 return 할 수도 있다.
함수에 조건식을 추가하면 아래와 같이 표현이 가능하다.
fun min(a: Int, b: Int) = if(a > b) b else a
코틀린의 기본 변수는 null을 가질 수 없다. 따라서 null 값을 사용하기 위해 추가적인 작업이 필요하다.
아래와 같이 x에 null 값을 넣어주면 오류가 발생하지만, y와 같이 ?를 추가해주면 null이 가능한 변수임을 명시해줄 수 있다.
var x: Int = 10
x= null // 오류 발생
var y: Int? = 10
y = null // 정상 수행
코틀린은 null을 안전하게 사용하기 위해 ?.연산자를 사용한다.
자바에서 if(str != null) return str.toUpperCase() else return null 과 같은 것이다.
val str = "abc"
// ?.앞의 변수가 null이 아닐 때만 함수가 실행되고 앞의 변수가 null이면 null을 반환
println(str?.toUpperCase())
nullable로 !!도 존재하는데, !!는 강제로 null이 아님을 선언하는 것이다. 즉, !!를 사용하면 x는 이후부터 not null로 인식한다. 하지만 그 값이 null이면 Null Point Exception이 발생한다.
val s: String? = null
val x: String = s!!
코틀린에서 for 반복문은 자바와 비슷하다.
//java
ArrayList<String> arrayList = new ArrayList<>();
for(Stirng str: arrList){
System.out.println(str);
}
//kotlin
var arrayList: ArrayList<String> = ArrayList<>()
for(str in arrayList){
println(str)
}
//java
for(int i=0; i<5; i++){
System.out.println(i);
}
//kotlin
// 1에서 5까지 출력
for(i in 1..5){
println(i)
}
// 역순으로 5부터 1까지 출력
for(i in 5 downTo 1){
println(i)
}
// 일정 간격으로 출력
for(i in 1..5 step 2){
println(i)
}
// 끝 번호 제외하고 출력
for(i in 1 until 5){
println(i)
}
코틀린에서 if문은 자바와 거의 동일하다.
val x = 10
val y = 15
if(x < y) println(true)
코틀린에서 when은 자바의 switch문과 동일하다.
//java
int x = 5;
switch(x){
case 1:
System.out.println("1");
break;
case 5:
System.out.println("5");
break;
default:
break;
}
//kotlin
val x = 5
when(x){
1 -> println("1")
5 -> println("5")
else -> println("10")
}
코틀린의 기본 문법에 대해 공부해보고 자바랑 어떻게 다른지에 대해 알게 되었다. 확실히 자바를 사용할 때보다 코드의 수가 많이 줄 것 같다는 것을 체감할 수 있었다.