본문 바로가기

Programming!

Kotlin - Preconditions.kt 둘러보기

코드 작성시 만들어서 사용하기는 하지만, 공통으로 있으면 좋을 만한~~~ 것들이 있다.

 

https://github.com/JetBrains/kotlin/blob/master/libraries/stdlib/src/kotlin/util/Preconditions.kt

 

GitHub - JetBrains/kotlin: The Kotlin Programming Language.

The Kotlin Programming Language. . Contribute to JetBrains/kotlin development by creating an account on GitHub.

github.com

Spring Assert를 간혹 사용하기는 했는데 코틀린도 포함되어 있으니 사용하는 것으로 한다.

Null Check 예제만 들어도 무난하지 싶다( 나머지야 보면 다 아는 것들.)

internal class PreconditionsTest : StringSpec() {
    private val log = KotlinLogging.logger {  }
    init {
        "NULL 을 넣어 IllegalStateException 예외를 내보자 " {
            val nullTxt: String? = null
            val e = shouldThrow<IllegalStateException> {
                val result = checkNotNull(nullTxt){"Null 이에요"}
                log.debug { result }
            }
            e.message shouldBe "Null 이에요"
            e shouldBe beInstanceOf<IllegalStateException>()
        }

        "NULL이 아닌 경우 정상 값 반환 " {
            val txt: String? = "TEST"
            val result = checkNotNull(txt){"Null 이에요"}

            result shouldBe "TEST"
        }
    }
}

참고로 Test에서 결과에 대한 Type확인은 beInstanceOf 를 사용하면 된다.

그외 코드야 뭐..

 

 

 

 

Preconditions.kt 코드에서 굳이 뭐가 다를까 하는 함수도 있지만 넘어가자...ㅎㅎ

@kotlin.internal.InlineOnly
public inline fun <T : Any> requireNotNull(value: T?): T {
    contract {
        returns() implies (value != null)
    }
    return requireNotNull(value) { "Required value was null." }
}

@kotlin.internal.InlineOnly
public inline fun <T : Any> checkNotNull(value: T?): T {
    contract {
        returns() implies (value != null)
    }
    return checkNotNull(value) { "Required value was null." }
}