kotlin (2) NULL 처리

0

kotlin

목록 보기
2/3
post-thumbnail

코틀린 에서는 null 처리를 명확 하게 해야 합니다.

null이 올수 있는 곳엔 type에 ?을 붙임으로서 null이 가능함 변수임을 명시적으로 표현합니다.

fun printAllCaps(s: String?){
	val allCaps: String? = s?.toUpperCase()
    println(allCaps)
    }

?. 연산자를 사용하면 앞의 변수가 null이 아닐때만 오른쪽 함수가 수행되고 null이면 null을 반환 합니다.

즉 if(s!=null)s.toUpperCase() else null 이렇게 긴 문장을 ? 하나로 표현이 가능 합니다.

property 접근시에도 ? 연산자 사용이 가능하다.

class Employee(val name: String, val manager: Employee?)

fun managerName(employee: Employee): String? = employee.manager?.name

fun main(args: Array) {
    val ceo = Employee("Da Boss", null)
    val developer = Employee("Bob Smith", ceo)
    println(managerName(developer))
    println(managerName(ceo))
}

null 일 경우 default 값을 주고 싶은 경우 는 ?: 사용

fun getName(str  :String?){
	val name = str ?: "default값"
    }

강제 not null 처리

!! 이표시를 property나 변수에 붙이면 강제로 null이 아님을 선언하게 된다.
not null로 인식되어 처리 됩니다.
이렇게 해놓고 Null을 넣으면 에러가 발생

fun ignoreNulls(s: String?) {
    val sNotNull: String = s!!
    println(sNotNull.length)
}

let 함수

not null 일때만 구문을 실행해 주는 let 함수를 제공 한다.
let 함수를 사용하면 자신의 receiver 객체를 람다식 내부로 넘겨준다.

fun sendEmailTo(email: String) {
    println("Sending email to $email")
}

fun main(args: Array) {
    var email: String? = "yole@example.com"
    email?.let { sendEmailTo(it) }
    email = null
    email?.let { sendEmailTo(it) }
}

let 함수 내부에서 receiver객체를 it 으로 받아서 표현
따라서 email?.let{email -> sendEmailTo(email)}로 사용해도 됩니다.
?.를 사용하여 let 함수를 호출 했으므로 람다 내부에서 it은 null이 아닙니다.
또한 null이라면 let 람다 구문은 수행조차 안됩니다.

profile
👩🏻‍💻항상발전하자 🔥

0개의 댓글