티스토리 뷰

Server

Kotlin의 Type과 Nullable (3)

니용 2020. 7. 1. 11:53
반응형

Author: 니용

 


Kotlin 언어에서는 각 타입별로 이 변수가 nullable 한 지 판별할 수 있는 함수를 제공해줍니다.

 

String

fun validate(input: String?) {
   if(input.isNullOrBlank() || input.isNullOrEmpty()) {
      println("String is blank or empty")
      return false
   }
   else {
      println("input is ${input}")
      return true
   }
}

String Type에서 기본적으로 제공해주는 함수입니다. 객체가 null이거나 빈 객체면(혹은 "")만 가지고 있다면 false를 반환합니다. 

 

 


Generic

fun <T> printHashcode(generic: T) {
   println(generic?.hashCode())
}

fun main(args: Array<String>) {
   printHashcode(null)
}

Generic Type은 무조건 nullable입니다. 기본적으로 ?를 제공해주기 때문에 함수 내부에서 null check를 해주어야 에러가 나지 않습니다. 따라서 Non-null이 가능하게 하려면 타입을 지정해주어야 합니다. 

 

fun <T:Any> predicate(t: T) { // Any의 제약조건이 걸림
   println(t.hashCode())
}

fun main(args: Array<String>) {
   predicate(null)
}

 

 


Collection

아직 Collection을 다루어보지 않았지만 사용 방법은 Java와 똑같습니다. 

val list: List<Int?> = listOf(1, null, 3, 4, 5, null)
val filtered: List<Int> = list.filterNotNull()
print(filtered) // 1, 3, 4, 5

기본적으로 제공하는 함수 중 filterNotNull이 있습니다.

 

 


let 함수

Kotlin에서는 not null의 경우 구문을 실행시켜주는 let이라는 함수가 있습니다. 람다식의 일부로 자신의 receiver 객체를 람다식 내로 전달해줍니다. 

fun printIfNotNull(str: String) {
   print("${str} is printed")
}

fun main(args: Array) {
   var niyo: String? = "Niyo"
   niyo?.let { printIfNotNull(it) } // Niyo is printed
   niyo?.let { str -> printIfNotNull(str) } // Niyo is printed
   niyo = null
   niyo?.let { printIfNotNull(it) } // pass
}

위 경우 Exception이 나지 않지만 마지막에 호출된 .let 함수는 스킵됩니다.

반응형

'Server' 카테고리의 다른 글

Kotlin의 상속성과 다형성  (0) 2020.07.03
[Java] Files를 사용하여 입력하기  (0) 2020.07.02
Kotlin의 Pair와 Triple  (0) 2020.07.02
[Kotlin] MongoDB JPA 사용하기  (2) 2020.06.30
MongoDB 설치하기  (0) 2020.06.30
Kotlin의 lateinit과 Nullable (2)  (0) 2020.06.30
댓글
공지사항