Kotlin getOrElse - 잘못된 접근으로 발생하는 에러 제거
Notepad96
·2020. 11. 28. 22:23
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를 반환해주었으며 참조가 잘못되었어도 에러가 발생하지 않으며
이 결과를 바탕으로 따로 에러 발생 시 처리를 할 수 있다.
- getOrDefault 와 getOrElse는 동일한 기능을 한다.
Map에서는 getOrPut이라는 함수가 존재하는데 앞서 살펴본 함수들이 결과를 반환해줄 뿐이였다면
getOrPut은 인수로 준 Key값이 존재하지 않는다면 지정한 Value를 사용하여 Key/Value 쌍을 삽입해준다.
따라서 getOrElse 이후 Key=10을 참조하였을 경우 null을 반환받았지만
getOrPut 이후 Key=10을 참조하였을 경우 삽입된 "PLUS"를 반환받는다.
3. 참 조
'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 |