데일리 잡(Job) 지식

백만 달러짜리 실수, Null return이 안좋은 이유

개발하는 주디씨 2023. 11. 22. 13:35

 

개발을 하다보면 무심결에 null을 return 하도록 했던 적이 종종있다.
그런데, 이런 습관(?)이 백만 달러짜리 실수임을 알고있는가?

 

 

 

오늘 공유할 내용은 null을 리턴하는 코드가 왜 나쁜 코드인지, 코드를 읽는 사람의 입장과 코드 복잡성 관점으로 설명한 글입니다.
토스 tech(https://toss.tech/article/engineering-note-2?utm_source=oneoneone)에 게시된 원문을 바탕으로 이해한 내용을 포스팅합니다.

 

 

Null 이 왜 나쁜가요?

문제: 의미를 축약한 코드 표현

  • null 값
    • 데이터베이스에 해당 이름을 가진 사람이 없는 것은 아닐까?
    • 데이터베이스와 네트워크 연결이 불안정했던 것이 아닐까?
    • “김주디”는 탈퇴한 회원인 것이 아닐까?
    • “김주디”는 운영환경에서만 존재하는 사용자인 것 아닐까?

등 개발자가 추론하게 된다. Null 하나로,, 벌써 여기서부터 생산성이 떨어진다.

Null이 아니더라도 여러 원인을 하나의 표현으로 가려버리는 방식은 ❌

  • “ ” 빈문자열
    • 사용자가 입력을 시도하지 않았나..?
    • 무언가 입력했지만 잘못된 입력이었나?
    • 실제로 빈 문자열을 입력했나?

다양한 전재를 하게 되고 하나의 표현으로 여러 원인을 추측하게 만든다..

 

그렇다고, null을 사용하지말라는 것이 아니니 잘못 이해하면 큰일난다..! 
여기서 하고자하는 말은 null을 신중하게 사용하자는 것이다🙂

 

 

📌 로그에 맥락을 남기기

주석을 남기는것도 방법이지만, 주석은 실제 코드가 아니기 때문에 변경이 발생할때 같이 관리되지 않을 수 있습니다. 따라서 null 이 리턴 되었을 경우 로그나 Exception 메세지에 왜 null 이 발생할 수 있는지를 명확하게 정리함으로써 코드를 읽는 개발자가 이를 쉽게 파악할 수 있도록 합니다.

 

📌 맥락 처리를 위한 기능 만들기(단, 필요할때만)

null 이 리턴되었을 경우 이를 수정하기 위한 추가적인 로직 혹은 재시도 처리 등을 통해 Null 이 리턴되는 상황을 어느정도 유추하고 방어할 수 있습니다. 단, 무분별한 재시도 처리 등은 성능 저하 및 생산성을 떨어뜨릴 수 있기 때문에 반드시 필요한 경우에만 만드는게 좋습니다.

 

 

 

📚 원문 https://toss.tech/article/engineering-note-2?utm_source=oneoneone

📚 함께 보면 좋은 글 🛠 Java Optional 은 언제 사용해야할까?: https://careerly.co.kr/comments/87740?from=search-result&fromArea=tab-comment