개발을 하다보면 무심결에 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
'데일리 잡(Job) 지식' 카테고리의 다른 글
Nginx, Proxy 그리고 Load Balancer (2) | 2023.11.28 |
---|---|
[네이밍 컨벤션] camelCase, PascalCase, Snake_case, Kebab-Case (0) | 2023.11.24 |
면접관이 좋아하는, 기술 블로그 쓰는 법(내가 부정적 사례의 표본일수도?) (10) | 2023.11.12 |
우리의 약속, 코드 컨벤션 (Coding Conventions)과 보풀 제거기 Lint (2) | 2023.11.03 |
클린코드 작성 1원칙, 데드 코드(사용하지않는 코드)청소하기 (1) | 2023.10.27 |