본문 바로가기

Kotlin/안전성, 가독성을 효과적인 향상시키는 사용법

👋Kotlin : 6️⃣사용자 정의 오류 보다는 표준 오류를 사용

728x90

코틀린은 2010년에 처음 개발되었지만 2016년 2월에 첫 번째 안정 버전(stable version)이 공식적으로 배포되었을 정도로 굉장히 오랜 시간 동안 만들어지고 있고, 처음부터 대규모 애플리케이션을 실용적으로 만들기 위한 프로그래밍 언어로 설계되었고 현재는 모바일 애플리케이션, 웹 애플리케이션의 백엔드, 웹 애플리케이션의 프론트엔드 등 다양한 영역에서 활용되고 있습니다.

 

6️⃣표준 오류 사용을 권장

require, check 등의 함수를 사용해 대부분의 오류를 처리할 수 있지만, 이외에도 예외 상황을 나타내야 하는 경우가 있습니다.

 

예를들어 음식점의 업무 처리에서 주문한 음식에 대한 재료 소진에 대한 예외가 표준 라이브러리에서 제공하는 예외가 없다고 판단하여 사용자 정의 예외를 사용했다고 합시다.

import sun.security.util.Debug

internal class OutOfIngredientsException(message: String? = null) : Exception(message)

@Throws(OutOfIngredientsException::class)
fun takeOrders(foodName: String) {
    // 가정: 매개변수 foodName을 통해 필요한 재료를 확인한 후 creamCount를 초기화
    val creamCount = 0

    if (creamCount < 1)
        throw OutOfIngredientsException("재료 소진")
}

fun main() {
    try {
        takeOrders("pasta")
    } catch (e: OutOfIngredientsException) {
        Debug.println("Error", e.message)
    }

    print("손님에게 알림")
}

 

 

표준 라이브러리의 예외는 많은 개발자가 알고있어 재사용하기 좋고, 다른 사람들이 쉽게 이해할 수 있어서 사용자 정의 예외 보단 표준 라이브러리에서 제공하는 예외를 사용하는 것이 좋습니다.

 

위의 예제는 표준 라이브러리가 제공하는 IllegalArgumentException을 활용해 해결할 수 있습니다. 

import java.lang.IllegalArgumentException

internal class OutOfIngredientsException(message: String? = null) : Exception(message)

@Throws(OutOfIngredientsException::class)
fun takeOrders(foodName: String) {
    // 가정: 매개변수 foodName을 통해 필요한 재료를 확인한 후 creamCount를 초기화
    val creamCount = 0

    if (creamCount < 1)
        throw IllegalArgumentException("재료 소진")
}

fun main() {
    try {
        takeOrders("pasta")
    } catch (e: IllegalArgumentException) {
        Debug.println("Error", e.message)
    }

    print("손님에게 알림")
}

IllegalArgumentException : 메소드가 잘못되었거나 부적합한 인수를 전달했음을 나타내기 위해 사용

 

https://goni95.tistory.com/185?category=1042949 

 

👋Kotlin : 5️⃣예외를 활용해 코드에 제한을 걸어라

코틀린은 2010년에 처음 개발되었지만 2016년 2월에 첫 번째 안정 버전(stable version)이 공식적으로 배포되었을 정도로 굉장히 오랜 시간 동안 만들어지고 있고, 처음부터 대규모 애플리케이션을 실

goni95.tistory.com

 

챕터 5에서 require()을 통한 예외를 활용을 공부 했으니 사용해보고 마치겠습니다.

import sun.security.util.Debug

@Throws(OutOfIngredientsException::class)
fun takeOrders(foodName: String) {
    // 가정: 매개변수 foodName을 통해 필요한 재료를 확인한 후 creamCount를 초기화
    val creamCount = 0
    require(creamCount > 1) { "재료 소진"}
}

fun main() {
    runCatching {
        takeOrders("pasta")
    }.fold(
        onSuccess = { println(it) },
        onFailure = { Debug.println("Error", it.message) }
    )

    print("손님에게 알림")
}