인프런 커뮤니티 질문&답변
null 을 많이 허용하지 않는 이유
해결된 질문
작성
·
24
·
수정됨
1
안녕하세요~
강의 중 강사님께서 null을 되도록 허용하지 않는 것으로 보였습니다.
공감이 되었는데, CancelEntity.orderItemId 와 같은 곳에 -1 을 설정한 다거나 QnA.answer 에 Answer.EMPTY 를 설정하는 것은 어떤 장점이 있을지 궁금합니다.
저는 위와 같은 경우는 해당 필드를 nullable 로 하는 것이 이 필드는 없을 수 있다는 것을 더 명확하게 나타낼 수 있다고 생각했습니다.
좋은 강의 감사합니다!
답변 1
1
안녕하세요 질문 감사드립니다!
우선 저는 nullable 자체가 불확실성을 퍼트리는 역할을 한다고 생각합니다
그런 측면에서 기본값이 존재한다면 이 불확실성이 퍼지는 것을 막을 수 있습니다
특히 null 체크하는 로직이 계속 퍼져나가게 되는 상태에서 -1 같은 기본 값을 쓴다면
별도 null체크 로직 없이 findById(-1) = 결과없음 = 로직상 진행 할 것이 없음 이런 흐름이 나타나게하는데 가능하다면 이것을 선호하는 편 입니다
물론 nullable하다면 null 일 경우 별도 로직을 추가해애초에 조회를 하지 않고 에러를 뱉거나 할 수 있지만, 디비 자원이 크게 영향이 가지 않는 수준이라면 저는 코드에 좀 더 투자하는편 인 것 같습니다 😃
그치만 그렇다고해서 항상 기본 값을 구성 할 수는 없다고 생각하기도 합니다, 그래서 가급적 명확히 통제 된 null을 사용하는 것을 선호하는 것 같습니다!
(특정 레이어에서 객체가 변환되어 넘어갈 때 무조건 null을 없애게 끊게 한다던가 하는 식입니다)
또 특정 상황에 DB데이터를 확인할 때 레거시들에서 null 자체가 모호함을 주는 경우가 꽤 많아서 불호하기도합니다, 레거시들 보다보면 이게 정말 데이터가 없어서 null이란건지 아니면 초기화가 안 됬단건지...? 이런 데이터 관점에서도 모호함을 보여주기 때문에 가급적 DB에 null을 넣는 것을 최소화 하는 것을 선호합니다
결국 장점을 요약 한다면 불확실성의 전파를 막고, 트레이드오프가 있지만 코드를 더 단순화하게 하고, 모호함을 줄일 수 있기 때문인 것 같습니다 (아마 장점이 더 있을텐데 지금 생각나는 것은 이 정도네요!)
결국 당연하지만 전략이란거는 적합한 상황에 맞춰서 쓸 때 가장 효율을 발휘하는 것 같습니다
또 가장 중요한건 이 전략 관련해서는 팀/동료들과 얘기를 해서 기준을 정하는게 좋다고 생각하는 편입니다!
모쪼록 답이 되었길 바랍니다! 감사합니다!





자세히 답변 달아주셔서 너무 잘 이해가 되었습니다 🙂
말씀주신 내용 개인적으로 코딩해보면서 더 느껴보겠습니다.
감사합니다!