728x90
1. String 타입 null 체크
문자열 데이터의 유효성을 체크하기 위해 다음과 같은 방법을 사용할 수 있다.
여기서 유효성은 데이터가 빈 문자열 또는 null 인지 확인한다.
equals() 와 == 연산자
if("".equals(map.get("stringData")) || map.get("stringData") == null) {
...
}
"".equals(비교데이터)를 통해 해당 값이 빈 값인가, 비교데이터 == null을 통해 해당 값이 null인가를 판단할 수 있다.
이 때, (비교데이터).equals("") 방식은 exception이 발생할 수 있기 때문에 불가하다.
더보기
여기서 자세히 설명하면, equals()는 실제 값을 비교하고 == 연산자는 두 개의 주소값을 비교한다.
String str1 = '어쩌고';
String str2 = str1;
String str3 = new String('어쩌고');
str1.equals(str2) //true
str1 == str2 //true
str2.equals(str3) //true
str2 == str3 //false
- str1.equals(str2)
: 동일한 문자열이므로 true - str1 == str2
: 같은 주소값을 가르키므로 true - str2.equals(str3)
: 동일한 문자열이므로 true - str2 == str3
: str3은 엄연히 다른 객체이므로 다른 주소값을 가진다. 따라서 false
StringUtils.hasText()
StringUtils는 Spring Framework 에서 제공하는 여러 유용한 유틸 중 문자열 관련 유틸이다.
public static boolean hasText(@Nullable String str) {
return str != null && !str.isEmpty() && containsText(str);
}
private static boolean containsText(CharSequence str) {
int strLen = str.length();
for(int i = 0; i < strLen; ++i) {
if (!Character.isWhitespace(str.charAt(i))) {
return true;
}
}
return false;
}
내부 로직은 위와 같은데, 공백(whitespace) 까지 체크해주는 것을 볼 수 있다.
즉,
- str 이 null 인가
- str이 빈 문자열 ("")인가
- str이 공백으로만(whitespace) 이루어져 있는가
를 체크해서 모두 해당되지 않을 때 True를 반환한다.
StringUtils.hasText("") //false
StringUtils.hasText("어쩌고") //true
StringUtils.isEmpty()
사실 isEmpty() 라는 메서드가 존재한다. 내부 로직은 첫번째로 설명한 [equals()와 '=='] 와 같다.
하지만 얘는 Spring 5.3.9 버전부터 deprecated 되어 지원하지 않으니 권장하지 않는다.
String 타입의 null 체크를 위해 StringUtils.hasText() 사용을 권장한다.
2. 객체 Object null 체크
== 연산자
if(Object == null) {
...
}
너무 쉽죵
ObjectUtils.isEmpty()
String과 마찬가지로 Object를 위한 유틸도 있다. (사실 나는 이걸 잘 사용하지 않는다.)
구조를 살펴보면 다음과 같다.
public class ObjectUtils {
public static boolean isEmpty(Object s) {
if (s == null) {
return true;
}
if ((s instanceof String) && (((String)s).trim().length() == 0)) {
return true;
}
if (s instanceof Map) {
return ((Map<?, ?>)s).isEmpty();
}
if (s instanceof List) {
return ((List<?>)s).isEmpty();
}
if (s instanceof Object[]) {
return (((Object[])s).length == 0);
}
return false;
}
}
728x90