본문 바로가기
  • 오늘도 한걸음. 수고많았어요.^^
  • 조금씩 꾸준히 오래 가자.ㅎ
IT기술/JAVA

[JAVA] String의 빈값 구분하기 null check

by 미노드 2023. 5. 24.

자바로 개발하다보면 String 값을 자주 사용하는데,
null 체크나 빈값인지 아닌지 체크하는 기능이 반드시 쓰이는 것 같습니다.

그래서 빈값을 체크하는 기능에 대해 별도로 정리해두고자 합니다.

1. isEmpty()

Java 6 이상부터 지원하는 isEmpty() 메소드로 빈값인지 아닌지 구분할 수 있습니다.
그러나 null값인 경우 에러가 발생합니다.
isEmpty()만 가지고 구분하기엔 한계가 있어 보입니다.

1
2
3
4
5
6
7
String aa = "";
String bb = "  ";
String cc = null;
        
System.out.println("aa : "+aa.isEmpty());
System.out.println("bb : "+bb.isEmpty());
System.out.println("cc : "+cc.isEmpty());
cs

 

2. != null

비교 연산자를 통해 null인지 아닌지 구분하는 방법을 쓸 수 있습니다.
다만 null인 것만 걸러내는 것으로 보입니다.

그렇다면  1. 과 2. 를 합치면 어떻게 될지 실험해봤습니다.
만약 값이 null일 경우 isEmpty()를 수행하며 에러가 발생하지 않을까 생각되었으나, 결과는 달랐습니다.
에러없이 null, 빈값 구분이 가능합니다.

1
2
3
4
5
6
7
String aa = "";
String bb = "  ";
String cc = null;
        
System.out.println("aa : "+(aa != null && aa.isEmpty()));
System.out.println("bb : "+(bb != null && bb.isEmpty()));
System.out.println("cc : "+(cc != null && cc.isEmpty()));
cs

이는 (2.)cc != null 을 먼저 수행한 뒤에 (1.)isEmpty()를 수행하면 에러가 발생하지 않는 것인데,
만약 순서가 바뀌어 (1.)을 먼저 수행하면 에러가 발생하게 됩니다.

System.out.println("cc : "+(cc.isEmpty() && cc != null)); // 에러발생 Cannot invoke "String.isEmpty()" because "cc" is null 

명쾌한 방법은 아닌 것 같아 다른 방법을 찾아봤습니다.

3. 빈값 체크 기능을 직접 구현

제가 일하던 회사에선 빈값 체크 기능을 라이브러리로 직접 구현해서 사용하는 경우가 대부분이었습니다.

특히 input되는 값이 이상한 인코딩의 특수문자로 빈공간으로 될 경우 isEmpty()로도 걸러지지 않았으며,
""와 똑같이 보이는데도 값이 있는 특수문자도 있었으며, 특수문자 값을 구할 수 없는 경우도 많았습니다.

때문에 직접 빈값을 체크하는(null 유무까지 한번에 체크) 기능을 구현해서 사용했습니다.

제가 직접 null check 기능을 구현해봤는데 다음과 같이 가능할 것으로 보였습니다.