코틀린은 Google I/O 2017에서 안드로이드의 공식 언어로 채택되었다. 그렇기 때문에 이제는 안드로이드 개발를 하면서 코틀린으로 개발을 하는 방향을 잡아야한다. 오늘은 코틀린의 기본적인 문법을 설명하도록 하겠습니다.
// 자바
int x = 10;
// 코틀린
var x: Int = 10
val y = 10
코틀린은 java에서 사용하는 ;를 사용하지 않는다. 또한 변수 타입을 지정하지 않아도 변수에 값에 따라 자동으로 변수 타입이 지정이된다. 그렇게 때문에 위에 예제에서 x에 10으로 변수를 초기화 했을때 x는 자동으로 int로 변수 타입이 정해진다.
또는 변수이름 옆에 :를 통해 변수 타입을 직접 지정해줄 수 있다.
코틀린에서는 2가지 변수 선언 방식이 있다:
val는 변할 수 없는 상수로 ready only이면서 동시에 로컬 변수이다. 즉 초기화 이후에는 값을 변경할 수 없는 변수이다.
//Int 타입으로 x 변수를 10으로 초기화했다
var x: Int = 10
//변수는 var 타입이기 때문에 변경이 안되므로 오류가 발생한다.
x = 15
var는 일반적인 변수로 변수의 값을 변경 할 수 있다.
//Int 타입으로 x 변수를 10으로 초기화했다
val x: Int = 10
//변수는 val 타입이기 때문에 변수의 값을 변경할 수 있다.
x = 15
코틀린 언에서는 기본적으로 null값을 가질수없도록 설정이 되어있다. 그렇기 때문에 null 값을 이용하기 위해서는 추가적인 작업이 필요하다.
var x: Int = 10
x = null //오류 발생
var y: Int? = 10
x = null //정상 작동
위 코드에서 볼 수 있듯이 x에 null값을 넣어주면 오류가 발생하지만 변수 최기화 할때 물음표를 추가해주면 null이 가능한 변수임을 명시해줄 수 있다.
코틀린은 null을 안전하게 처리하기 위해 ?. 연산자를 사용합니다.
val str = "abc"
println(str?.toUpperCase())
연산자 ?.를 사용하면 앞의 변수가 null이 아닐때만 오른쪽의 함수가 실행되고 앞의 변수가 null이면 null을 반환합니다.
즉, java에서 if(str != null) return str.toUpperCase() else return null 과 같은 것이다.
nullable로 !!도 존재하는데 !!는 강제로 null이 아님을 선언하는 것이다.
val s: String? = null
val x: String = s!!
즉, !!를 사용하면 x는 이후부터는 not null로 인식되는것이다. 하지만 그 값이 null이면 NPE(Null Point Exception)가 발생한다.
자바에서는 다음과 같이 메서드를 생성했었다.
public int add(int x, int y){
return x + y;
}
이제는 코틀린으로 위와 똑같은 메서드를 만들어보자.
public fun add(x: Int. y: Int): Int{
return x + y
}
매우 비슷해보이지만 구조가 조금 다른것을 알 수 있습니다. 코틀린 메서드는 다음과 같은 구조를 갖고있습니다
fun 함수명 (변수명: 변수타입): 리턴 타입 {return 값}
코틀린 메서드는 다음과 같이 한줄로도 표현할 수 있습니다.
fun add(x : Int, y: Int) = a + b
리턴 타입을 명시 하지 않아도 되고 return 값을 "=" 통해 간단하게 표현할 수도 있다.
코틀린 메서드는 조건식을 포함한 메서드도 간단하게 표현할 수 있다.
fun checkString(x: String): Boolean {
if(x == "hello) return true
else return false
}
//조건식 메서드 한줄 표현
fun checkString(x: String) = if(x == "hello) true else false
코틀린에서 for 반복문은 자바와 비슷하다
//Java
ArrayList<String> arrayList = new ArrayList<>();
for (String str: arrayList){
System.out.println(str)
}
//Kotlin
var arrayList: ArrayList<String> = ArrayList<>()
for(str in arrayList){
println(str)
}
코틀린에서 iterator를 사용할때는 다음과 같이 사용하면 된다.
//1에서부터 10까지 iterate 하면서 출력
for(i in 1..10){
println(i)
}
//역순으로 10에서부터 1까지 출력하기
for(i in 10 downTo 1){
println(i)
}
//일정 간격으로 동작시키기
for(i in 1..10 step 2){
println(i)
}
//끝 번호를 제외하고 출력하기
for(i in 1 until 10){
println(i)
}
코틀린에서 if문은 자바와 거의 동일하다
//kotlin
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")
}