티스토리 뷰
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
'언어 > java' 카테고리의 다른 글
[java Exception] java.util.ConcurrentModificationException-원인 (0) | 2021.06.22 |
---|---|
[java indexOf]배열에서 특정값의 인덱스 구하기 (2) | 2021.06.10 |
[java Generic]제네릭(Generic) 사용법, 사용의도 (0) | 2021.04.08 |
[java split] java String 구분자로 자르기-특수문자로 구분하기 (0) | 2021.02.19 |
[java] Map-getOrDefalut() 사용법 (0) | 2021.01.28 |
- Total
- Today
- Yesterday
- MST
- 최소 스패닝 트리
- 삼성 sw역량 테스트
- 코딩테스트
- Stomp
- 채팅
- SWEA
- 백준
- websocket
- git
- java
- sockjs
- dfs
- 자바
- 운영체제
- OS
- 완전탐색
- programers
- 알고리즘
- JavaScript
- Baekjoon
- Heap
- Oracle
- 분리 집합
- BFS
- 프로그래머스
- 삼성 sw역량테스트
- Spring
- DP
- 정렬
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |