티스토리 뷰

[java] String의 null 처리 팁, <null 처리, String, java.lang.NullPointerException>




NullPointerExceptionNullPointerException




 "java.lang.NullPointerException" 많이 보시던 에러인가요?


이번 포스팅에서 헷갈리기 쉬운 String의 null 처리에 대해 간단히 알아보겠습니다.


기본적으로 String은 참조타입이지만 기본 타입의 성질을 일부 가지고 있어 헷갈리기 쉽습니다.


*참고

기본 타입 : 값을 주고 받는 형태 (byte, short, int, long, float, double, boolean, char)

참조 타입 : 주소값을 주고 받는 형태 (기본 타입을 제외한 나머지 타입)




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//1. String str = null;
        String str = null;
        
        System.out.println(str == null); // true
        System.out.println(str.equals("")); // 에러 발생
 
        
// 2. String str = "";
        String str = "";
        
        System.out.println(str == null); // false
        System.out.println(str.equals("")); // true
 
 
// 3. 어떤 경우든 가능
        System.out.println(str == null || str.equals(""));
 
cs



예제를 통해 살펴보겠습니다.


str이 빈 문자 이거나 null 인것을 true로 예외처리하기 위해 위와 같은 코드를 작성했다고 합시다.



1. String str = null 인 경우


str == null 은 true가 나오지만 str.equals("") 구문은 NullPointerException이 발생하여 에러가 발생합니다.




2. String str = "" 인 경우


str.equals("")는 true로 정상적으로 처리됩니다만, str == null 은 false가 나와서 위의 식은 사용할 수 없습니다.


따라서,


str == null || str.equals("")


를 사용하여 처리하게 되면 2가지 경우 모두 true를 반환할 수 있습니다.


|| (or)의 특성으로 앞의 식이 true라면 굳이 뒤에 것을 검사하지 않기 때문에

(*참고 | 를 사용하면 앞, 뒤 구문 둘다 검사 진행)


1. String str == null 인 경우 앞부분에서 true로 반환되고 바로 종료되고,


2. String str = ""인 경우 앞부분은 false 뒷부분에서 true가 나와 결국 true가 반환됩니다.


따라서 위의 식으로 모든 경우를 처리할 수 있습니다.



1
2
3
4
5
if (str == null || str.equals("")) {
    // str이 비어있는 경우의 처리
else {
    // str에 문자열이 들어있는 경우의 처리
}
cs



간단히 정리하자면 위와 같은 형태로 사용하여 빈 문자열과 차있는 문자열을 구분하면 되겠습니다.


도움이 되셨다면, 아래의 하트 혹은 댓글 남겨주세요~


더 좋은 포스팅으로 찾아 뵙겠습니다.


감사합니다.

댓글