자바에서 문자열의 빈 값("")과 Null을 다루는 방법은 여러 가지가 존재합니다.
먼저, 문자열의 빈 값과 null을 다룰 때 아래와 같은 코드를 자주 만나게 되는데요.
boolean checkString(String str) {
return str == null || str.equals("");
}
하지만 이 방법은 equals()가 내부적으로 가지는 여러 로직에 의해 기능적으로 낭비일 수 있습니다.
그래서 여기서는 3가지 방법을 소개하려고 합니다.
아래의 코드를 봐주시기 바랍니다.
//equals()
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
//length()
public int length() {
return count;
}
length()는 길이만 계산하여 반환하는 것에 반해, equals()는 내부적으로 복잡한 로직이 존재하는 것을 볼 수 있습니다.
length()의 사용 방법은 다음과 같습니다.
boolean checkString(String str) {
return str == null || str.length() == 0;
}
문자열이 빈 값이면 true를 반환합니다.
단, 여기서 문제가 있는데요.
바로 문자열이 스페이스바를 이용하여 입력한 whitespace(" ")인 경우입니다.
그럴 때는 아래와 같이 trim()을 이용하여 공백을 제거 후 사용하시면 됩니다.
boolean checkString(String str) {
return str == null || str.trim().length() == 0;
}
메서드명이 좀 더 직관적이죠?
설명을 보면 다음과 같습니다.
1번의 length()를 이용한 방법과 동일한 원리임을 알 수 있습니다.
사용 방법은 다음과 같습니다.
boolean checkString(String str) {
return str == null || str.isEmpty();
}
문자열이 빈 값("") 일 경우 true를 리턴합니다.
하지만 isEmpty()를 이용할 경우에도 whitespace(" ")인 경우에 문제가 생길 수 있는데요.
이번에도 아래와 같이 trim()을 이용하여 공백을 제거 후 사용하시면 됩니다.
boolean checkString(String str) {
return str == null || str.trim().isEmpty();
}
1번 방법과 2번 방법 모두, 고질적인 whitespace(" ")의 문제가 있었는데요.
isBlank()를 활용하는 것도 하나의 방법이 될 수 있습니다.
설명을 보면 문자열이 빈 값이거나 whitespace인 경우에는 true를 반환한다고 되어 있습니다.
사용 방법은 다음과 같습니다.
boolean checkString(String str) {
return str == null || str.isBlank();
}
StringUtils는 아파치 커먼즈(Apache Commons)의 라이브러리인데요.
스프링을 사용하신다면 다음과 같이 추가해주시면 됩니다.
<!--MAVEN-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<!--GRADLE-->
compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.7'
StringUtils의 빈 값을 처리하는 메서드는 2가지가 있는데요.
바로 isEmpty()와 isBlank()입니다.
사용 방법은 각각 다음과 같습니다.
//isEmpty()
boolean checkString(String str) {
return StringUtils.isEmpty(str);
}
//isBlank()
boolean checkString(String str) {
return StringUtils.isBlank(str);
}
문자열이 빈 값("") 일 경우 true를 반환합니다.
하지만 whitespace(" ")의 처리에서는 다른데요.
isEmpty()는 false를, isBlank()는 true를 반환합니다. 이 점을 주의하셔서 사용하시면 될 것 같습니다.
하지만 두 가지의 방법 모두 공통적으로 지닌 강점이 있는데요.
바로 NullPointerException을 발생시키지 않는다는 점입니다.
위에서 제시한 1~3번 모두 문자열의 null처리를 추가로 작성해줬었죠?
하지만 StringUtils를 이용하면 그럴 필요가 없습니다.
StringUtils는 이 외에도 문자열을 처리하는 다양한 메서드를 제공합니다.
아래의 문서를 참고하여 이용해 보는 것도 좋을 것 같습니다.
참고 : https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html
리플렉션(Reflection) -2 (0) | 2019.10.28 |
---|---|
리플렉션(Reflection) -1 (0) | 2019.10.25 |
[Design Pattern] 싱글톤 패턴(Singleton Pattern) -2 (2) | 2019.10.22 |
[Design Pattern] 싱글톤 패턴(Singleton Pattern) -1 (2) | 2019.10.22 |
[Design Pattern] 팩토리 메서드 패턴(Factory Method Pattern) (0) | 2019.10.21 |
댓글 영역