티스토리 뷰

SW 개발

Kotlin, 기본 문법 정리

지단로보트 2018.12.07 02:14

먼저 읽어볼만한 글

코틀린 변수에 대한 null 체크하기

// val 변수는 최초 1번 값을 할당하면 재할당이 불가능하다.
val someText: String
someText = "foo"
someText = "bar" // [Error] Val cannot be reassigned

// var 변수는 값의 재할당이 가능하다.
var someText: String
someText = "foo"
someText = "bar"

// 모든 변수는 기본적으로 null이 허용되지 않는 non-null 타입이다.
val someText : String
someText = null // [Error] Null can not be a value of a non-null type String.Companion

// ? 오퍼레이터를 타입 뒤에 붙이면 null이 허용된다.
val someText : String?
someText = null

// ?: 엘비스 오퍼레이터는 좌변이 null일 경우에만 우변을 실행한다.
someText ?: return

// 1개 이상의 여러 문장을 실행할 때는 run{} 블록을 이용한다.
someText ?: run {
    println("foo")
    println("bar")
}

// 변수명 뒤에 ?를 붙이고 함수를 실행하면 null이 아닐 경우에만 함수를 실행한다.
someText?.run {
    println(this)
}

// null이 아닐 경우에만 함수를 실행하여 리턴 값을 변수에 할당한다. null일 경우 그대로 null을 할당한다.
val toUpperCase = someText?.toUpperCase()

// null일 경우 우변의 값을 할당한다.
val toUpperCase = someText?.toUpperCase() ?: "null"

// 변수의 값에 따라 조건에 해당하는 문장을 실행한다.
when (someText) {
    "foo" -> println("foo")
    "bar" -> println("bar")
    else -> println("else or null")
}

// 리스트를 사용하거나 정렬하거나 필터링할 수 있다.
val someList: List<String> = listOf("C", "B", "A")
val someListSorted = someList.sortedBy { it }
val someListFiltered = someList.filter { it > "B" }

println(someList) // [C, B, A]
println(someListSorted) // [A, B, C]
println(someListFiltered) // [C]

Kotlin 예외 처리

  • Java에서 Checked ExceptionRuntimeException을 제외한, Exception을 상속한 모든 예외 클래스를 범위로 가진다. Checked Exception의 특징은 메써드 내에서 반드시 해당 예외를 처리해야 한다. 처리하지 않고자 할 경우 메써드 레벨에 throws 구문을 명시해야 한다.(ex: throws IOException) 그렇지 않을 경우 컴파일 단계에서 오류가 발생한다.
  • KotlinChecked Exception을 일종의 불필요한 안티 패턴으로 규정하여 언어 레벨에서 제거해버렸다. 문제는, Kotlin으로 작성된 코드에서 Java로 작성된 코드를 호출할 때 발생하는 Checked Exception이다. 이 경우, 컴파일 단계를 건너 뛰고 런타임 단계에서 java.lang.reflect.UndeclaredThrowableException 예외가 발생하므로 유의해야 한다. 해결책은 메써드 레벨에 @Throws 구문을 명시하면 해결된다. 컴파일 단계에서 앞서 설명한 throws 구문으로 변경해주는 지시자 역할을 한다.
// Checked Exception이 상위에서 인지되어 처리
@Throws(IOException::class)
fun foobar() {
   ...
}
댓글
댓글쓰기 폼