오래전에 어느 커뮤니티에서 가져온 글이다.
- NULL Parameter를 넘기지 말것
// 화면에서 size라는 parameter를 넘기는 case
// 혹시 null이 넘어오게 되면 기본형(int)이므로 default 0선언 (혹시 아니라면 알려주세요)
int num =0;
int size = param.getSize();
// (숫자 / 0)이므로 /0때문에 ArithmeticException 발생
totalPages = (int) (totalCnt / size);
2.NULL 여부 비교
String a = null;
System.out.println(a.indexOf("갓"));
// 결과
// Exception in thread "main" java.lang.NullPointerException
String a = null;
if(a != null){
System.out.println(a.indexOf("갓"));
}
3.문자열 비교시 equlas 문자열을 앞에 위치하도록
public static void main(String[] args) {
String a = null;
System.out.println("1번째============");
if (a == "god") {
System.out.println("참");
} else {
System.out.println("거짓"); //거짓 출력
}
System.out.println("2번째============");
if (a.equals("god")) {
// NPE 발생!
System.out.println("equals => 참");
} else {
System.out.println("equals => 거짓");
}
}
/******* 결과 *******/
// 1번째============Exception in thread "main" 거짓
// 2번째============ java.lang.NullPointerException
public static void main(String[] args) {
String a = null;
if ("god".equals(a)) {
// NPE 발생하지 않음
System.out.println("equals => 참");
} else {
System.out.println("equals => 거짓");
}
}
/******* 결과 *******/
// equals => 거짓
// "비교의 주체가 문자열"부터 주어진다면 "NullPointException"이 발생하지 않는다.
// 결국 순서만 바꿨음에도 적어도 "NullPointException"을 피할 수 있게 된다.
//정리해보면 문자열 비교는 "non-null String 기준으로 비교" 하는 것이 좋다.
//"비교의 주체가 문자열"이 오도록 하거나, "Constants" 상수로 처리하여 코딩하는 방법도 추천
4.toString() 보다 valueOf()를 추천
/*** 잘못 된 예시 ****/
public static void main(String[] args) {
Integer a = 1;
System.out.println(a.toString());
a = null;
System.out.println(a.toString());
}
/******* 결과 *******/
//1
//Exception in thread "main" java.lang.NullPointerException
//a라는 변수에 null이 오게되는 경우 당연히 "NullPointerException"이 발생한다.
/*** 권장하는 방식 ***/
public static void main(String[] args) {
Integer a = null;
System.out.println(String.valueOf(a));
}
/******* 결과 *******/
//null
//NullException을 발생을 피할 수 있게 된다.
5.체이닝 메소드 ( method Chaining) 호출 자제
/*** 잘못된 코드예시 ***/
// 이중 메시드 호출 지 null 값이 반환면
// 뒤에 호출 되는 메서드는 결국 null.method1()..method2().method3() 과 같다
// debug 시 어려움
String polcValCont = moStorePolicyService.getStorePolcBase(polcCd).getPolcValCont();
6.Apache Commons 에서 제공하는 StringUtils를 최대한 사용
public static void main(String[] args) {
System.out.println(StringUtils.isEmpty(null)); //true
System.out.println(StringUtils.equals("1", null)); //false
System.out.println(StringUtils.equals(null, "1")); //false
System.out.println(StringUtils.indexOf("갓", null)); //-1
System.out.println(StringUtils.indexOf(null, "갓")); //-1
System.out.println(StringUtils.upperCase(null)); //null
}
/******* 결과 *******/
//true
//false
//false
//-1
//-1
//null
7.method 에서 NULL 리턴 하지 말자!
/* 권장하지 않는 방식*/
public List<UserVO> getUsers(){
Result result = selectUsersQuery('selectUser');
return Collections.emptyList(); // 권장 return null; // 비 권장 .
}
일단 여기까지.
꽤 오래된 글이라 어디서 퍼왔는지 기억이 안난다. 혹시 최초 글작성자님 보고 계시면 댓글줘요. 링크추가 할게요!