자바에서 가장 많이 만나본 NullPointerException의 원인과 해결 방법을 알아보자.
1. NullPointerException 원인
NullPointerException은 실제 값이 아닌 null을 가지고 있는 객체/변수를 호출할 때 발생하는 예외이다.
String a = null; //1
a.indexOf(1);
String str = null; //2
System.out.println(str.toString());
1. null인 변수 a에 점(.)으로 객체 변수에 접근할 때(내용을 참조할 때) 변수 a는 아무것도 가리키지 않는 상태인데 내부 내용에 접근하려 하니까 오류가 난다.
2. null에는 toString이 없기 때문이다.
진짜 문제는 코드를 짜다보면 해당 변수에 null이 들어있는지, 아닌지를 구분하기가 어렵다. 그래서 NullPointerException 해결 방법으로 크게 세 가지를 알아보자.
2. NullPointerException 해결 방법
1. Try-Catch
try ~ catch를 사용하여 java.lang.nullpointerexception을 예외 처리한다. 코드는 아래와 같다.
public static void main(String[] args){
String str = null;
try {
str = str.toString(); //str toSting()시 NullPointerException 발생
System.out.println(str); //실행되지 않는다.
} catch(NullPointerException e){
str = "null입니다";
System.out.println(str.toString());
}finally{
System.out.println("무조건 출력"); //무조건 실행되는 코드
}
}
2. Null Parameter 넘기지 말기
try ~ catch 같은 방어코드를 짜둔다고 하더라도 사전에 의미 없는 NULL값은 파라미터로 넘기지 말자. 아래와 같이 a라는 변수를 null로 선언하고 여기서 b값이 없는 경우 null 에러가 발생할 수 있다.
String a = null;
a = b.toString();
System.out.println(a);
3. Null 여부 비교 처리 로직 작성
변수가 null인지 체크하는 코드를 짜주면 된다.
String str = null;
if(str != null){
//코드 작성
}else{
//코드 작성
}
4. toString() 대신 valueOf() 사용
System.out.println(str.toString()); //nullPointerException
System.out.println(String.valueOf(str)); //'null' 출력
오늘도 오류와 함께
'WORK > Java' 카테고리의 다른 글
[Java] NumberFormatException 원인과 해결 방법 (0) | 2023.03.08 |
---|---|
[프로그래머스/Java] 하샤드 수 (0) | 2022.04.10 |
[프로그래머스/Java] 콜라츠 추측 (0) | 2022.04.10 |
[프로그래머스/Java] 행렬의 덧셈 (0) | 2022.04.10 |