본문 바로가기
Android

Kotlin 널 안전성이란

by kkong93 2023. 4. 3.
반응형

널이란 객체가 선언되었지만 초기화되지 않은 상태를 의미한다. 개게는 데이터가 저장된 주소를 참조하므로 참조 변수라고 한다. 객체에는 주소가 저장되며 이 주소로 메모리에 접근해 데이터를 이용한다. 그런데 널은 객체가 주소를 가지지 못한 상태를 나타낸다.

 

1. Type safety : Kotlin은 변수와 식을 컴파일 시 알 수 있도록 보장하고 형식 불일치와 같은 일반적인 오류를 방지하기 위해 엄격한 입력 규칙을 적용합니다. 예를 들어 변수를 Int(integer) 유형으로 선언하는 경우 String(text) 유형의 값을 할당할 수 없다.

var x: Int = 42
x = "hello" // error: Type mismatch

 

2.Null safety : Kotlin은 개발자가 런타임 오류의 일반적인 소스인 NPE(Null pointer exception)를 피할 수 있도록 Null safety 기능을 제공합니다. 코틀린의 유형 시스템은 nullable과 non-nullable 유형을 구별하며 개발자들이 nullability를 명시적으로 처리하도록 요구한다. 예를 들어, 변수가 null로 선언된 경우(?) 변수를 사용하기 전에 null을 확인해야 한다.

var s: String? = null
s.length // error: Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String?

null 가능 변수를 안전하게 사용하려면 안전 호출 연산자(?) 또는 Elvis 연산자(?:)를 사용하여 기본값을 제공할 수 있다

 

3. Exception safety : Kotlin의 예외 처리 메커니즘은 런타임 오류를 안전하게 처리하고 코드의 예기치 않은 상태에서 복구할 수 있는 방법을 제공한다. 코틀린은 예외를 처리하고 충돌을 방지하기 위해 트라이캐치 블록의 사용을 권장한다. 또한 Kotlin은 예외가 던져졌는지 여부에 관계없이 항상 실행되는 최종 블록을 제공한다.

 

fun divide(a: Int, b: Int): Int {
    try {
        return a / b
    } catch (e: ArithmeticException) {
        println("Error: ${e.message}")
    } finally {
        println("Operation completed.")
    }
    return 0
}

val result = divide(10, 0) // prints "Error: / by zero" and "Operation completed."

 

두 번째 인수가 0이면 ArmithicException이 던져지고, 포착되어 콘솔에 인쇄되고, 마지막으로 완료 메시지를 인쇄하기 위해 블록이 실행된다.

반응형

댓글