JAVA, C를 이용하여 개발하다 보면
java.lang.nullpointerexception 오류가 적잖이 발생한다.
널 어쩌구 하는 걸 보니 뭔가 빠졌다는 것 같은데.,,
원인은 간단하다.
원인: 객체 생성 후 인스턴스를 생성하지 않은 상태에서 NULL 오브젝트를 사용해서 발생
해결방법은 여러 가지이다.
1. 방어 코드 사용
try~catch를 사용하여 java.lang.nullpointerexception을 예외 처리하고 null인지 아닌지 비교할 수도 있다.
2.null Parameter를 넘기지 말자.
뒷단에서 방어 코드를 짜 놓는다고 하더라도 "의미 없는 NULL"은 파라미터로 넘기지 말자.
예를 들어 size라는 변수를 null로 선언을 한 뒤 문자의 길이를 받아온 뒤 연산을 하는 로직을 만들었다.
1
2
3
4
5
|
int Size = null;
...
Size = paramcode.size();
result = (int) total/Size;
|
cs |
여기서 paramcode의 값이 없는 경우 에러가 null 에러가 발생할 수 있다.
3. null 여부 비교 처리하기
흔하게 사용되는 방식이다. 나도 자바 코딩할 때면 굉장히 자주 사용한다.
선언한 변수가 null인지 체크를 해주면 된다.
1
2
3
4
5
6
7
8
9
10
|
int Size = null;
...
if(Size != null){
Size = paramcode.size();
}else{
return;
result = (int) total/Size;
|
cs |
위의 예시를 이어서 설명하면, Size 변수가 null인지 검사를 하고 로직이 넘어가도록 해주는 것이다.
4. 문자열 비교 시 equals를 먼저 사용하기
String 문자열은 기본형이 아니다. 객체이기 때문에 문자열 비교를 위해 "equals"메서드를 사용한다.
그런데 문자열에 null 값이 들어온 경우 equals 메서드를 찾을 수 없기 때문에 null 에러가 발생하게 된다.
아래는 안 좋은 예이다.
1
2
3
4
5
6
7
|
String name = param.get("NAME");
if(!name.equals("")){
System.out.println("성공");
}else{
System.out.println("실패");
}
|
cs |
name이라는 변수가 null인데 equals 메서드를 호출하려고 하니 에러가 발생하는 것이다.
아래는 좋은 예이다.
1
2
3
4
5
6
7
|
String name = param.get("NAME");
if(name == "이름"){
System.out.println("성공");
}else{
System.out.println("실패");
}
|
cs |
1
2
3
4
5
6
7
|
String name = param.get("NAME");
if("이름".equals(name)){
System.out.println("성공");
}else{
System.out.println("실패");
}
|
cs |
equals 메서드의 순서를 바꾸어 주는 것만으로도 간단히 해결할 수 있다.
5. toString() 대신 valueOf() 사용하기
1
2
|
System.out.println(name.toString()); //null 에러 발생
System.out.println(String.valueOf(name))://'null' 출력
|
cs |
6. @NotNull, @NotEmpty, @NotBlank 사용하기
spring을 사용하고 있다면 어노테이션을 사용하자!
'BackEnd > Java' 카테고리의 다른 글
[JAVA] LinkedList의 개념 및 사용법 (1) | 2022.09.07 |
---|---|
[JAVA] for문 리팩토링하기(List) (0) | 2022.09.04 |
[JAVA] 생성자 정리 (0) | 2022.09.04 |
[Java]java.math.BigDecimal cannot be cast to java.lang.Integer 에러 (0) | 2022.03.04 |
Java - 문자열(String)에 큰따옴표("), 작은 따옴표(') 넣는 방법 (0) | 2021.11.18 |
댓글