본문 바로가기
Baeldung번역&공부/Java-string

문자열 비어있는지 확인법(Checking for Empty or Blank Strings in Java)

by ms727 2025. 2. 2.

원본 글: https://www.baeldung.com/java-blank-empty-strings

이 글에서는 String객체에 대해서 empty 또는 blank상태인지 확인하는 방법을 확인해봅니다.

1. Empty vs Blank

먼저, empty와 blank에 대해서 알아야합니다.
empty: String 객체가 null이거나 길이 자체가 없는경우를 말합니다.
blank: String객체가 공백으로 이루어진 경우를 말합니다. 여기서 공백이란 스페이스바, 탭 같은 것들을 말합니다.

2. Empty Strings

Java6버전 이상에서는 쉽게 확인이 가능합니다.

@Test
public void above_java6_empty_check_test() {
    String result = new String();
    String nullResult = null;
    Assertions.assertTrue(result.isEmpty());
    Assertions.assertTrue(nullResult == null || nullResult.isEmpty());
}

위에서 empty상태에 대한 정의를 길이 자체가 없거나 null인경우라고 하였지만, String.isEmpty()가 null확인도 해주는 것은 아닙니다. 그래서 null 확인은 따로 작성해줘야합니다.

java 6버전 미만에서는 isEmpty()를 직접 구현해줍니다.

boolean isEmptyString(String string) {
    return string == null || string.length() == 0;
}

실제로 String.isEmpty()내부 구현이 lenght==0만을 확인하고 있습니다.

3. Blank Strings

만약 문자열이 비어있는지 확인하고 싶으면 String.trim() 메서드를 통해서 확인할 수 있습니다.

String.trim()은 문자열에 대한 모든 공백을 제거해줍니다.

@Test
public void blank_check_by_trim_test() {
    String result = "            ";
    Assertions.assertTrue(result == null || result.trim().isEmpty());
}

java11에서는 위 방식을 대체한 String.isBlank()라는 메서드가 등장하였습니다.

@Test
public void blank_check_test() {
    String result ="            ";
    Assertions.assertTrue(result == null || result.isBlank());
}

내부 구현을 보면 문자열 인덱스를 하나씩 돌면서 모든 문자가 공백인지를 확인합니다.

String.isBlank()는 힙 메모리 영역에 새로운 문자를 생성하지 않으므로 좀 더 효율적입니다. 만약 java11이상 버전을 사용하고 있다면 이 방식을 사용하길 권장하고 있습니다.

4. Bean validation

vlidation 관련 어노테이션을 사용해서 확인할 수 있는 방법이 있습니다.

@Pattern(regexp = "\\A(?!\\s*\\Z).+")
String someString;

정규 표현식을 사용하여 문자열이 비어있거나 공백으로 이루어지지 않았는지 확인합니다.

5. With Apache Commons

org.apache.commons:commons-lang3 라이브러리를 통하여 확인할 수 있습니다.

@Test
public void apache_blank_check_test() {
    String result ="            ";
    Assertions.assertTrue(StringUtils.isBlank(result));
}

내부구현은 String.isBlank()와 비슷합니다.
다만 String.isBlank()와 달리 null에도 잘 동작합니다.

6. With Guava

구글에서 만든 Guava라는 라이브러리를 통해서도 확인이 가능합니다.

@Test
public void guava_empty_check_test() {
    String result = null;
    Assertions.assertTrue(Strings.isNullOrEmpty(result));
}

메서드명에서도 알 수 있지만, null-safe합니다.
당연할 수 있겠지만 blank상태에 대한 검증까지는 진행하지 않습니다.

7. With Spring ObjectUtils

Spring 5.3.0버전 이상에서는 ObjectUtils를 사용해서 empty상태를 확인할 수 있습니다.

testImplementation 'org.springframework:spring-core:5.3.0'

해당 의존성을 추가해주고 테스트를 진행합니다.

@Test
public void spring_core_empty_check_test() {
    String result = null;
    Assertions.assertTrue(ObjectUtils.isEmpty(result));
}

내부 구현을 보면 null체크와 empty상태를 확인하는 것을 알 수 있습니다.

//내부구현
public static boolean isEmpty(@Nullable Object obj) {
    if (obj == null) {
        return true;
    } 
    //중략...
    else if (obj instanceof CharSequence) {
        return ((CharSequence)obj).length() == 0;
    } 
    // 중략...
}

다만 Guava라이브러리와 마찬가지로 blank에 대한 검증은 수행하지 않습니다.

8. 결론

문자열에 대해서 empty나 blank에 대한 검증을 수행하는 방법에 대해 확인하였습니다.

제일 편한 방법은 Apache Common Lang라이브러리를 사용하는 것이라고 합니다. 왜일까 생각해봤을때 기본 Java에서 제공하는 메서드들은 null-safe하지 않은데, 위 라이브러리는 null-safe하기 때문이지 않을까합니다.