Gidhub BE Developer

[Clean Code] 에러 처리 (Error Handling) : Null 반환 Method

2020-02-26
goodGid

이 글의 개념 및 코드들은 책을 읽으며 정리한 내용을 바탕으로 작성하였습니다.

Null 반환

  • null이 반환될 수 있는 Method는 좋지 못하다.

  • 왜냐하면 null 여부를 체크하기 위한

  • 불필요한 코드가 추가되기 때문이다.


Example

public void registerItem(Item item) {
    ItemRegistry registry = peristentStore.getItemRegistry(); // [1]
    if (registry != null) {
        boolean isExist = registry.getItem(item.getID()); // [2]
        if (isExist != null && isExist) {
            // Do Something...
        }
    }
}
  • 위 코드에는

  • null 여부를 판단하는

  • 2가지 if 문이 있다.


  • 즉 Method가 null을 return 할 수 있기 때문에

  • 어쩔 수 없이 null 여부를 체크하는

  • if 조건문이 추가된 것이다.


Q. if 조건문이 registerItem() Method의 기능을 위해 반드시 필요한 코드일까?

  • 그렇지 않다.

Solution

Null Return이 가능한 Method

[1] peristentStore.getItemRegistry();
[2] registry.getItem(item.getID());
  • 만약 위 Method가

  • null을 return 하지 않음을 보장한다면

  • null 여부를 체크하기 위한

  • if 문은 필요가 없어진다.


  • 어떻게 하면 registerItem() Method 안에서

  • 불필요한 if 조건 문을 제거 할 수 있을까?


  • 다양한 방법이 있겠지만

  • null을 return 하는게 아니라

  • Emtpy 객체를 return한다.

Refactiong Code

[1] peristentStore.getItemRegistry();
[2] registry.getItem(item.getID());
  • 2개의 Method가 null을 return하지 않음을 보장한다고 가정해보자.


  • 그러면 registerItem() Method는 다음과 같이 수정할 수 있다.
public void registerItem(Item item) {
    ItemRegistry registry = peristentStore.getItemRegistry(); // [1]
    boolean isExist = registry.getItem(item.getID()); // [2]
    if (isExist) {
        // Do Something...
        }
    }
}
  • 어떠한 경우에도 null은 return 되지 않는다.

  • 그렇기 때문에

  • null 여부를 체크하는 코드는 불필요해지고

  • 핵심적인 코드만 남게되고

  • 코드는 보다 간결해진다.

Summary

  • 서비스를 운영하면서

  • 가장 주의해야하는 부분은

  • null 체크라 생각한다.


  • 이런 주의점을 사전에 방지할 수 있는

  • 방법을 많이 생각해보고 적용시켜보도록 하자.


한줄평

  • Clean Code는 읽기도 좋아야 하지만 안정성도 높아야한다.

Reference


Index