널 참조의 위험성

  • 자바를 포함한 많은 프로그래밍 언어에서 가장 많이 발생하는 유형이NullPointException 줄여서 NPE라고도 부른다.
  • 자바에선 NPE를 줄이기위해 Optional을 지원 하기 시작했다.
  • 자바의 Optional은 값을 래핑하기 때문에 객체 생성에 따른 호버헤드가 발생하고, 컴파일 단계에서 null 가능성을 검사하지 않는다.
  • 코틀린을 비롯한 최신 언어에선 null 가능성을 컴파일러가 미리 감지해서 NPE 가능성을 줄일 수있다.

 

fun main() {
 //컴파일 오류 val a : String = null
  // var b : String = "aabbcc"
// b = null  컴파일 오류   
  
  var a : String? = null
    println(a?.length) //null 
    
    var b: Int = if (a != null) a.length else 0
      println(b) // null
      
      //엘비스 연산자
      //좌변이 null인 경우, 우변 값 반환
      val c = a?.length ?: 0
        println(c)
}
fun getNullStr(): String? = null
  
fun getLongthIfNotNull(str: String?) = str?.length ?:0
  
fun main() {
  val nullableStr = getNullStr()
    
  val nullableStrLength = nullableStr?.length ?: "문자길이".length 
    println(nullableStrLength) //4 (문자길이 반환해줌)
    
  val length = getLengthIfNotNull(null)
  println(length) //0  3line에 null이 아닌 경우 0을 출력하도록 되어있기에 0 출력
    
    
    //throw NullPorinterException() //에러발생 
    val c: String? = null
    val b = c!!.length //!!쓰게 되면,개발자가 봤을 때 이 코드는 널이 발생하지 않는 안전한 코드다.라고 컴파일러에게 알려줌
    //Null을 없애주는 것은 아니고 널이 발생하든 안하든 개발자가 체크해야하는 부분이다.
      
}

 

출처 : FastCampus

'Kotlin' 카테고리의 다른 글

Kotlin.06 클래스와 프로퍼티  (0) 2023.04.02
Kotlin 05.예외처리  (0) 2023.04.02
Kotlin 03. 흐름제어  (0) 2023.04.02
Kotlin 02. 함수  (0) 2023.04.02
Kotlin 01.변수  (0) 2023.04.02

+ Recent posts