티스토리 뷰

java는 값이 없는 상태 = null로 표현한다.

 

NullPointerException은 이 null을 만났을 때 발생하는 runtime 예외상황으로 프로그램이 비정상 종료가 될 수 있으므로 따로 처리를 해줘야 한다. 흔하게 발생하기도 하므로 코드 작성 시에 꼭 null상황에 대한 예외처리를 해줘야 한다.

 

 

 

예외상황

값이 null인데 이것을 이용하여 다른 코드를 수행하려고 하면 예외가 발생한다. 몇 가지 예시를 들어보면 아래와 같다.

 

 

1) null값을 비교

String str = func(); //함수를 통해 string을 return받음

if(str.equals("a"){ //이부분에서 에러
	
}

위와 같이 변수 str을 fnc() 메서드 return 받은 값으로 지정하게 될 때, func() 메서드에서 만약 null이 리턴된다면?

String str객체가 없는데 equals라는 메서드로 비교하려 접근했기 때문에 NullPointerException이 발생하게 된다.

 

 

 

2) 초기화 되지 않은 list에 값 넣기

List<Integer>[] list = new List[3];//각각 list[index] = new ArrayList<>();가 생략됨
list[0].add(1);//이부분에서 에러

위와 같이 List[] 배열을 생성했는데 각 배열에는 list객체가 생성되지 않았다. 즉 list [i]=null인 상태이다.

list가 생성되지 않았는데 이를 이용하여 add메서드를 이용해 값을 넣으려고 한다면? NullpointerException이 발생하게 되는 것이다.

 

 

 

위의 상황 말고 여러 상황이 존재하겠으나, 결국 null인데 값을 사용한다는 것이므로 같은 예외상황으로 볼 수 있다.

 

 

 

 

 

방지, 해결방법

1) null이 발생할 것 같은 값에 대해서는 미리 예측해서 null체크를 해주기

 

여기서 중요한 점은 if문에 여러 조건을 같이 체크한다면 null체크를 먼저 하기!

if(str.equals("a") || str!=null){

}// x

if(str!=null || str.equals("a")){

}// o

 

 

2) chaning메서드 호출 자제하기

 

str.a(). b() -> 이런 식의 연결된 메서드 호출은 중간에 어떤 값이 return 될지 모르니 안전하게 사용하기 위해 자제하는 것이 좋다

 

 

 

3) toString() 대신 String.valueOf() 사용하기

 

toString은 NullPointerException이 발생하고 String.valueOf()는 null 스트링 값 자체가 리턴된다. 사용 상황에 따라 판단해서 사용하면 좋을 듯싶다.

Integer i = null;
System.out.println(String.valueOf(i));// -> null
System.out.println(i.toString());//-> NullPointerException
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함