Kotlin getOrElse - 잘못된 접근으로 발생하는 에러 제거

Notepad96

·

2020. 11. 28. 22:23

300x250

 

 

 

 


1. getOrElse, getOrNull

 

List와 Map과 같은 컬렉션에서 값을 읽을 경우 의도치 않게

 

 

현재 인덱스 범위 밖에 인덱스를 사용하여 참조할려고 하던가

 

존재하지 않는 Key를 사용하여 Value를 읽을려고 시도하여

 

 

의도치 않은 값을 얻게 되거나 에러가 발생하는 문제가 존재한다.

 

 

 

이런 경우 사용할 수 있는 것이 getOrElse, getOrNull 이다.

 

 

getOrElse : 참조할 값이 존재하지 않거나 잘못되었을 경우 지정한 Else 값을 반환받는다.

 

getOrNull : 참조할 값이 존재하지 않거나 잘못되었을 경우 Null을 반환받는다.

 

 

 

 

 


2. 코 드

환경 : Kotlin Version = 1.4.20, JVM

fun main(args : Array<String>) {
    println("=============LIST================")
    val ml = mutableListOf(4, 1, 2, 5, 3)
    println(ml)
    // println(ml[10])  // IndexOutOfBoundException
    println("1. ${ml.getOrNull(4) }")   // index = 4는 존재하므로 ml[4]를 반환
    println("2. ${ml.getOrNull(10) }")  // index = 10는 없으므로 Null 반환
    println("3. ${ml.getOrElse(10) { -1 } }")   // index = 10은 없으므로 대신 -1 반환



    println("==============MAP===============")
    val mm = mutableMapOf(3 to "qwe", 1 to "asd", 2 to "grf", 4 to "zxc")
    println(mm)
    println("1. ${mm.getOrDefault(1, -1)}") // Key = 1은 존재하므로 Value 가져온다.
    println("2. ${mm.getOrDefault(10, -1)}") // Key = 10은 존재않으므로 -1 반환
    println("3. ${mm.getOrElse(10) { -1 } } ")  // getOrDefault와 동일한 기능
    println(mm[10])

    println("4. ${mm.getOrPut(10) { "PLUS" } } ") // Key = 10은 존재않으므로 10=PLUS 삽입
    println(mm[10]) // getOrPut을 사용하여 삽입되었다.
}

 

결 과

 

- getOrNull은 잘못 참조하였을 경우 Null을 반환한다.

 

리스트 인덱스 범위 밖인 10을 참조하여서 null 반환해준다.

 

 

 

 

- getOrElse 또한 잘못 참조하였을 경우 지정한 값을 반환해준다.

 

예시에서는 -1를 반환해주었으며 참조가 잘못되었어도 에러가 발생하지 않으며

 

이 결과를 바탕으로 따로 에러 발생 시 처리를 할 수 있다.

 

 

 

 

- getOrDefaultgetOrElse는 동일한 기능을 한다.

 

 

Map에서는 getOrPut이라는 함수가 존재하는데 앞서 살펴본 함수들이 결과를 반환해줄 뿐이였다면

 

getOrPut은 인수로 준 Key값이 존재하지 않는다면 지정한 Value를 사용하여 Key/Value 쌍을 삽입해준다.

 

 

 

따라서 getOrElse 이후 Key=10을 참조하였을 경우 null을 반환받았지만

 

getOrPut 이후 Key=10을 참조하였을 경우 삽입된 "PLUS"를 반환받는다.

 

 

 

 


3. 참 조

 

 

getOrElse - Kotlin Programming Language

 

kotlinlang.org

 

 

300x250

'Kotlin > Collections' 카테고리의 다른 글

Kotlin 큐(Queue)  (0) 2020.12.01
Kotlin 스택(Stack)  (0) 2020.11.30
Kotlin joinToString - List 문자열 변환 List to String  (0) 2020.11.28
Kotlin zip - List 묶기  (0) 2020.11.27
Kotlin flatMap - 원소 값 변경 및 추가  (0) 2020.11.27