개괄
호랑이도 무서워하는 곶감
자바를 시작한 사람에게 무엇이 제일 무서우냐 하면 무조건 'NPE, NullPointerException'이라고 할 것이다.
'혈연, 지연, 학연'보다 무서운 인연이 '악연이다'라는 말이 있듯
그만큼 자바와 null은 뗄레야 뗄 수 없는 존재이면서도 무서운 존재이다.
어쩌면 그 null 하나 때문에도 kotlin이 각광을 받으니...
NPE에 대해선 정말 여러곳에서 수만가지 이야기들을 들었다.
Effective Java의 item54에서는
null이 아닌, 빈 컬렉션이나 배열을 반환하라
라고도 쓰여져 있다.
세상에 누가 null을 반환하고 싶을까 스럽지만, 때로는 null을 반환해야 할 때도 있고, null을 반환하게 된다면 클라이언트가 추가 방어 코드를 구현해야 한다. 또 클라이언트가 방어코드를 빼먹으면 큰 오류가 발생하게 될 수도 있다.
치즈의 개수를 반환하는 코드가 있다고 해보자.
private final List<Chicken> chickenInStock = ...;
public List<Chicken> getChickens(){
return chickensInStock.isEmpty()? null : new ArrayList<>(cheesesInStock);
}
치킨의 재고를 반환하는 코드에서 null을 반환하지 말고
public List<Chicken> getChicken(){
return chickensInStock.isEmpty() ? Collections.emptyList() : new ArrayList<>(chickensInStock);
}
이렇게 빈 Arraylist를 반환하거나, 혹은
public Chicken[] getChickens[]{
return chickensInStock.toArray(new Chicken[0]);
}
와같은 빈 (혹은 빌 수도 있는) 배열을 반환하는 것이 좋다.
자바8 이후로는 optional.ofNullable로 nullcheck를 보다 유연하게 할수 있지만, optional은 많이 쓰면 가독성이 떨어지는 외에 오류가 많을 수 있다.
왜 이 얘기를 했니?
연산자와 관련된 튜터링을 하면서 튜터님이 말씀해주신
if var==null ? null : 11;
이라는 코드를 보고 갑자기 책에서 본 내용이 생각났다.
이런 코드들이 많이 쓰인다니, 프론트에서도 null checking을 열심히 해야 하나보다.
늘 혼자서만 공부하다 보니, 프론트와 소통할 수 있는 일이 한번도 없었고,
이에 늘 여기서 데이터를 정리하든 저기서 데이터를 정리하든 똑같지 않나라는 생각을 했는데,
정말 좋은, 프론트엔드들을 만나고 나니 정말 정보를 잘 정리해서 데이터를 던져야겠다는 생각이 들었다.
'자바' 카테고리의 다른 글
TIL - 좋은 객체지향적 설계원칙, SOLID(3) : LSP (0) | 2023.01.27 |
---|---|
TIL - OOP 요약 (0) | 2023.01.25 |
TIL - Math.Random은 정말 난수를 리턴할까? (0) | 2023.01.24 |
TIL - THE JAVA(2) Flow Chart (0) | 2023.01.20 |
TIL - THE JAVA(1), JVM (0) | 2023.01.19 |