inflearn logo
강의

Course

Instructor

Gemini's Practical Development - Commerce Backend Legacy and AI Application

null 을 많이 허용하지 않는 이유

Resolved

50

zodyr

4 asked

1

안녕하세요~

 

강의 중 강사님께서 null을 되도록 허용하지 않는 것으로 보였습니다.

공감이 되었는데, CancelEntity.orderItemId 와 같은 곳에 -1 을 설정한 다거나 QnA.answer 에 Answer.EMPTY 를 설정하는 것은 어떤 장점이 있을지 궁금합니다.

저는 위와 같은 경우는 해당 필드를 nullable 로 하는 것이 이 필드는 없을 수 있다는 것을 더 명확하게 나타낼 수 있다고 생각했습니다.

 

좋은 강의 감사합니다!

spring-boot 도메인 dbms/rdbms backend 인공지능(ai)

Answer 1

1

geminikims

안녕하세요 질문 감사드립니다!

우선 저는 nullable 자체가 불확실성을 퍼트리는 역할을 한다고 생각합니다
그런 측면에서 기본값이 존재한다면 이 불확실성이 퍼지는 것을 막을 수 있습니다

특히 null 체크하는 로직이 계속 퍼져나가게 되는 상태에서 -1 같은 기본 값을 쓴다면
별도 null체크 로직 없이 findById(-1) = 결과없음 = 로직상 진행 할 것이 없음 이런 흐름이 나타나게하는데 가능하다면 이것을 선호하는 편 입니다

물론 nullable하다면 null 일 경우 별도 로직을 추가해애초에 조회를 하지 않고 에러를 뱉거나 할 수 있지만, 디비 자원이 크게 영향이 가지 않는 수준이라면 저는 코드에 좀 더 투자하는편 인 것 같습니다 😃

그치만 그렇다고해서 항상 기본 값을 구성 할 수는 없다고 생각하기도 합니다, 그래서 가급적 명확히 통제 된 null을 사용하는 것을 선호하는 것 같습니다!
(특정 레이어에서 객체가 변환되어 넘어갈 때 무조건 null을 없애게 끊게 한다던가 하는 식입니다)

 

또 특정 상황에 DB데이터를 확인할 때 레거시들에서 null 자체가 모호함을 주는 경우가 꽤 많아서 불호하기도합니다, 레거시들 보다보면 이게 정말 데이터가 없어서 null이란건지 아니면 초기화가 안 됬단건지...? 이런 데이터 관점에서도 모호함을 보여주기 때문에 가급적 DB에 null을 넣는 것을 최소화 하는 것을 선호합니다

결국 장점을 요약 한다면 불확실성의 전파를 막고, 트레이드오프가 있지만 코드를 더 단순화하게 하고, 모호함을 줄일 수 있기 때문인 것 같습니다 (아마 장점이 더 있을텐데 지금 생각나는 것은 이 정도네요!)

 

결국 당연하지만 전략이란거는 적합한 상황에 맞춰서 쓸 때 가장 효율을 발휘하는 것 같습니다
가장 중요한건 이 전략 관련해서는 팀/동료들과 얘기를 해서 기준을 정하는게 좋다고 생각하는 편입니다!


모쪼록 답이 되었길 바랍니다! 감사합니다!

0

zodyr

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

카드 뉴스 만들기..

0

8

0

기존 mcp를 플러그인으로 대체

0

9

1

바이브코딩을 하는 개발자(작업복잡도 판단의 어려움)

0

10

1

커서에서 클로드 코드 실행했는데 쉬프트 +엔터가 안먹히는데요.

0

8

1

claw code 에 대해서는 어떻게 생각하시나요?!

0

17

1

비개발자용 리서치나 논문검색 프로젝트 요청

0

12

1

커밋 명령에 대한 플랜모드 미적용

0

18

2

prd.md 관련

0

18

3

하네스 강의 관련

0

30

2

시니어 리뷰 모드

0

20

1

갑자기 크루드가 실행이 안됩니다.

0

27

2

ProductOption을 통한 FindProductOption에 관한 질문

1

39

2

상수에 관련해서 질문있습니다.

1

38

2

JetBrains All Products Pack 3개월 이용권 신청 관련 문의

1

89

2

소스코드 보안

1

236

2

AI 사용 방법에 대하여...

1

118

2

PaymentValidator와 PaymentProcessor에서 주문과 결제를 중복 조회하는 구조에 대한 질문이 있습니다 !

1

62

3

결제 개념 컴포넌트 분리 기준과 네이밍 전략에 대한 질문있습니다 !

1

76

3

AI 를 적용시 브랜치를 다루는 팁 같은게 있을까요?

1

109

2

사용자가 상품을 선택하고 쿠폰을 고를 때 가장 혜택이 큰 쿠폰을 고르는 상황

1

101

2

장바구니 아이템 가격 기준?

1

106

2

인텔리제이에서 legacy 프로젝트 그레이들 인식 불가

1

136

4

예약 변경 시 '과거 정책 기준 재계산' 요구사항에 따른 스냅샷 데이터 구조 설계 고민

1

130

2

선생님

1

159

1