다들 널 체크 어떻게 하고 계시나요?
param ==null || 뒤에
두번째 조건문에서 param.equals("") 를 쓰시거나 param.length()==0 를 쓰시거나 param.isEmpty() 를 쓰시곤 하실텐데요.
String.length() 메소드
-----------------------------------------
public int length()
{
return count;
}
-----------------------------------------
String.equals() 메소드
--------------------------------------------
public boolean equals(O bject obj)
{
if(this == obj)
return true;
if(obj instanceof String)
{
String s = (String)obj;
int i = count;
if(i == s.count)
{
char ac[] = value;
char ac1[] = s.value;
int j = offset;
int k = s.offset;
while(i-- != 0)
if(ac[j++] != ac1[k++])
return false;
return true;
}
}
return false;
}
-----------------------------------------
요즘 컴퓨터 성능이 너무 좋아서 시간이 많이 차이나진 않지만 과연 어떤게 좀 더 효율적인 코드인지 벤치마킹 해보았습니다.
public class BenchmarkNullCheck {
public static void main(String[] args) {
String checkText = "";
int loopCount = 99999999;
long startTime, endTime, elapsedTime1, elapsedTime2 , elapsedTime3;
startTime = System.nanoTime();
for (int i = 0; i < loopCount; i++) {
if (checkText == null || checkText.equals(""))
{
}
}
endTime = System.nanoTime();
elapsedTime1 = endTime - startTime;
System.out.println(".equals(\"\") 경과시간\t" +": " + elapsedTime1);
startTime = System.nanoTime();
for (int i = 0; i < loopCount; i++) {
if (checkText == null || checkText.isEmpty())
{
}
}
endTime = System.nanoTime();
elapsedTime2 = endTime - startTime;
System.out.println(".isEmpty() 경과시간\t"+": " + elapsedTime2);
startTime = System.nanoTime();
for (int i = 0; i < loopCount; i++) {
if (checkText == null || checkText.length()==0)
{
}
}
endTime = System.nanoTime();
elapsedTime3 = endTime - startTime;
System.out.println(".length() 경과시간\t"+": " + elapsedTime3);
}
}
간혹 아래와 같이 isEmpty()가 length() 보다 빠를때도 있었지만
출력 경과시간
.equals("") 경과시간 : 5955514
.isEmpty() 경과시간 : 3170202
.length() 경과시간 : 3177900
대체로 출력 경과시간은 아래와 같이
.equals("") 경과시간 : 4461290
.isEmpty() 경과시간 : 2891371
.length() 경과시간 : 2574479
length()가 1순위 그다음에 isEmpty()가 2순위 equals 3순위로 결과가 나왔습니다.
isEmpty() 메소드는 Java 6+ 환경에서만 가능하고 속도도 length()가 빠르니
따라서 널 체크는 다음과 같이 하는게 어떨까요 ?
if (param == null || param.length() == 0) {
//빈 값
} else {
// 값 존재
}
'프로그래밍 > JAVA' 카테고리의 다른 글
정규 표현식(Regular Expression) 2 (0) | 2018.01.23 |
---|---|
정규 표현식(Regular Expression) 1 (0) | 2018.01.23 |
디자인 패턴 MVC (0) | 2018.01.03 |
디자인 패턴 : FACTORY METHOD (0) | 2018.01.03 |
List,Set,Map 어떤것을 사용해야 할까? (0) | 2018.01.03 |