Prologue

코틀린에서 제공되는 isEmpty, isNotEmpty, isBlank, isNotBlank, isNullOrBlank, isNullOrEmpty 함수의 차이점을 알아보려고 한다.

비교를 위해 사용할 문자열은 다음과 같다.

1
2
3
4
5
6
val emptyString = ""
val blankString = " "
val blankNewLineString = " \n"
val withBlankString = " victory"
val nullString: String? = null
val standardString = "standard"

isEmpty

  • CharSequence가 아무 값도 포함하고 있지 않을 때, true를 반환한다.
  • 결과는 다음과 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    println(emptyString.isEmpty())
println(blankString.isEmpty())
println(blankNewLineString.isEmpty())
println(withBlankString.isEmpty())
println(nullString?.isEmpty())
println(standardString.isEmpty())

// 결과
true
false
false
false
null
false

isNotEmpty

  • CharSequence가 어떠한 값을 포함하고 있을 때(공백 포함), true를 반환한다.
  • 결과는 다음과 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    println(emptyString.isNotEmpty())
println(blankString.isNotEmpty())
println(blankNewLineString.isNotEmpty())
println(withBlankString.isNotEmpty())
println(nullString?.isNotEmpty())
println(standardString.isNotEmpty())

// 결과
false
true
true
true
null
true

isBlank

  • CharSequence가 공백만을 가지고 있을 경우나 empty일 경우, true를 반환한다.
  • 결과는 다음과 같다.
  • 공백+개행문자 -> 공백으로 판단한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    println(emptyString.isBlank())
println(blankString.isBlank())
println(blankNewLineString.isBlank())
println(withBlankString.isBlank())
println(nullString?.isBlank())
println(standardString.isBlank())

// 결과
true
true
true
false
null
false

isNotBlank

  • CharSequence가 empty 상황이 아니고, 값에 공백만 있지 않을 때 true를 반환한다.
  • 즉, 아무 값도 없거나 공백만 있을 때는 false를 반환한다.
  • 결과는 다음과 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    println(emptyString.isNotBlank())
println(blankString.isNotBlank())
println(blankNewLineString.isNotBlank())
println(withBlankString.isNotBlank())
println(nullString?.isNotBlank())
println(standardString.isNotBlank())

// 결과
false
false
false
true
null
true

isNullOrEmpty

  • CharSequence가 비어있거나 null일 경우, true를 반환한다.
  • 공백은 비어있는게 아니다. 그래서 false를 반환한다.
  • 결과는 다음과 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    println(emptyString.isNullOrEmpty())
println(blankString.isNullOrEmpty())
println(blankNewLineString.isNullOrEmpty())
println(withBlankString.isNullOrEmpty())
println(nullString.isNullOrEmpty())
println(standardString.isNullOrEmpty())

// 결과
true
false
false
false
true
false

isNullOrBlank

  • CharSequence가 null이거나 blank인 상황일 때, true를 반환한다.
  • 공백+개행 -> 비어있음(blank 상태)
  • 결과는 다음과 같다.
1
2
3
4
5
6
7
8

// 결과
true
true
true
false
true
false

Summary

어려운 내용은 아니지만, 헷갈리는 함수들이다. 그래서 사용할 때 자주 헷갈려서 정리를 했다. 주의해야 할 점은 다음과 같다.

  • empty : 정말 아무 값도 가지지 않는 것을 말한다.
    • blank보다 empty가 작은 개념.
  • blank : 공백만 있거나 정말 아무 값도 가지지 않는 것을 의미한다.
    • 공백+개행문자도 공백으로 판단
    • blank가 더 큰 개념.

Reference