Posted on 2007. 11. 5. 13:05
Filed Under Java

Java - 널 체크 및 스트링 비교 플밍팁
2006/01/27 13:50
============================ Java Programming Tip ① ==============================

객체의 메소드를 사용할 때 반드시 객체가 null 인지 여부를 먼저 체크해야 합니다.

// 1. bad
if (param.equals("cust_id")) {}

// 2. good
if (param != null && param.equals("cust_id")) {}

// 3. good, too
if ("cust_id".equals(param)) {}

1번의 경우 param 이 null 이면 NullPointException이 발생합니다.
NullPointException을 handling하지 않은경우 WAS에서 제대로 처리하지 못해
메모리 누수 및 WAS 장애의 원인(!)이 됩니다.
물론 param이 null이라면,
2번의 경우가 "cust_id"라는 스트링을 생성하지 않으므로 가장 좋다고 할 수 있습니다.
3번의 경우는 2번 대신 코딩 편의를 위해서 쓴다고 할 수 있죠.

자바에서 가장 흔하게 사용되는 객체인 String을 예로 들었습니다만,
다른 객체들도 마찬가지입니다.
NullPointException을 없애고, 불필요한 객체 생성을 줄이면
WAS의 메모리 사용량과 메모리 누수를 상당부분 줄일 수 있습니다.
 

============================ Java Programming Tip ② ==============================

java에서 String에 값이 들어있는지를 체크하기 위해
다음과 같이 체크하는 경우가 있습니다.

if (param != null && param.equals("")) {
    // 값이 있는 경우 처리
} else {
    // 값이 없는 경우 처리
}

이 경우 다음과 같이 사용하는 것이 좋습니다.
if (param != null && param.length() != 0) {
    // 값이 있는 경우 처리
} else {
    // 값이 없는 경우 처리
}
                또는
if (param == null || param.length() == 0) {
    // 값이 없는 경우 처리
} else {
    // 값이 있는 경우 처리
}
 
equals("")를 사용하면 불필요하게 새로운 스트링인 ""를 생성하게 되고
함수 내부에서 몇 번의 비교후에 다른 스트링으로 형변환 및 치환도 합니다.
반면 length() 함수는 내장객체인 int 변수 하나만 리턴하면 되므로 빠릅니다.
아래 String.equals() 함수와 String.length() 함수 소스를 확인해보세요.
-----------------------------------------
 public int length()
 {
     return count;
 }
-----------------------------------------
    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;
    }
-----------------------------------------
 
 
 
 
 
해맸다. -_-;

About

by 청지인

Notice

Counter

· Total
:
· Today
:
· Yesterday
: