본문 바로가기
Blog/TIL

2025-01-15 (수)

by 코젼 2025. 1. 15.
728x90
반응형

firstOrNull

  • Kotlin 컬렉션에서 사용되는 함수.
  • 조건에 맞는 첫 번째 요소 반환 or 조건에 맞는 요소가 없을 경우 null 반환.
  • Predicate 사용 가능: 람다를 전달하여 조건을 지정할 수 있음.
  • 후속 처리를 위해 널 체크나 엘비스 연산자 (?:) 를 사용할 수 있음.
  1. 조건 없이 사용
    val list = listOf(1, 2, 3)
    val first = list.firstOrNull()
    println(first) // 출력: 1
    

val emptyList = emptyList()
val emptyFirst = emptyList.firstOrNull()
println(emptyFirst) // 출력: null


2. 조건과 함께 사용
```kotlin
val list = listOf(1, 2, 3, 4)
val evenNumber = list.firstOrNull { it % 2 == 0 }
println(evenNumber) // 출력: 2

val noMatch = list.firstOrNull { it > 10 }
println(noMatch) // 출력: null

firstOrNull vs first vs find

  • first: 조건에 맞는 요소가 없으면 NoSuchElementException 예외 발생
  • firstOrNull: 조건에 맞는 요소가 없으면 null 반환
    val list = listOf(1, 2, 3)
    val result1 = list.first { it > 3 } // 예외 발생: NoSuchElementException
    val result2 = list.firstOrNull { it > 3 } // 반환값: null
  • find: 조건에 맞는 요소가 없으면 null 반환
메서드 동작 방식 차이점
firstOrNull {} 리스트의 첫 번째 요소부터 순회하며 조건을 만족하는 첫 번째 요소를 반환 조건을 만족하는 첫 번째 요소를 찾으면 즉시 반환, 없으면 null
find {} 리스트의 모든 요소를 순회하며 조건을 만족하는 첫 번째 요소를 반환 사실상 firstOrNull과 동일한 동작 (가독성 차이)

Result

  • Result -> success or failure
  • 실패 상태를 반환하더라도 호출부에서 바로 예외를 발생시키지 않음.
  • onFailure 블록이 실행되거나 호출부에서 추가적인 처리를 하지 않으면 아무 일도 일어나지 않고 넘어감.
    val result = AService.findEmail(email)
    result.getOrThrow() // 실패 상태일 경우 예외를 발생시킴
  • 하기 작성되어 있는 것처럼, onSuccess 로 추가적인 처리를 해주어야 예외가 호출됨.
    AService
      .onSuccess {
          throw ServiceException(ErrorCode.EXCEPTION_TEST)
      }
728x90
반응형

'Blog > TIL' 카테고리의 다른 글

2025-01-20 (월)  (1) 2025.01.20
2025-01-16 (목)  (0) 2025.01.16
2025-01-14 (화)  (0) 2025.01.14
2025-01-13 (월)  (1) 2025.01.13
2025-01-10 (금)  (1) 2025.01.10

댓글