강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

Dompoo님의 프로필 이미지
Dompoo

작성한 질문수

토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1

Member 도메인 코드 개선

`Objects.requireNonNull()`을 계속 사용하시는 이유가 궁금합니다.

작성

·

195

·

수정됨

3

15강에서 스프링의 @NonNull 지원SpotBugs를 통해서 null 안정성을 확보하신 내용을 봤습니다.

 

그런데 계속해서 Objects.requireNonNull() 을 사용하시는 것을 보고 의문이 들었습니다. 이미 Member 객체의 null 안정성은 확보된 것이 아닌가요?
굳이 Objects.requireNonNull() 을 계속 남기시는 이유를 생각해봤는데, 애노테이션+도구의 조합과 함께 코드적으로 null 안정성을 확보하고 싶으신 것으로 이해했습니다. (해당 도구가 사라져도 코드 수준의 안정성은 남아있기 때문에, 코드를 수정할 필요는 없어지니까요!)

 

null 검증에 대해서만큼은 코드가 장황해지는 비용보다 추후의 변경에 대한 비용이 더 크다고 생각하시는 것 같은데, 제 이해가 맞을까요?

답변 1

4

토비님의 프로필 이미지
토비
지식공유자

Objects.requireNonNull()은 실행 중에 null 값이 들어오는 상황을 막아주기 위해서 넣은 것입니다.

애노테이션과 도구를 이용한 널 안정성 도구는 실행하기 전에 빌드 과정에서 발견되는 null 관련 오류를 체크하는데 도움이 됩니다. 배포하기 전에 빠르게 대응이 가능하겠죠. 하지만 정적 분석 도구는 한계가 분명합니다. 코드만 봐서는 문제가 없지만 API 등을 통해서 외부에서 들어오는 null 값은 미리 예측해서 오류를 차단할 수는 없죠. 그래서 두 가지 방법(정적 분석, 빌드 과정 오류 검증 + 런타임 체크)을 병행하는 것입니다. 그 중 하나만 쓴다면 런타임에 체크 가능한 Objects.requireNonNull() 이겠죠.

하지만 코드 레벨에서 분명하게 체크 가능한 것이 있다면 빌드 시점에 또는 IDE의 경고를 통해서 미리 체크하는 것이 안전성을 높일 수 있어서 권장됩니다.

Dompoo님의 프로필 이미지
Dompoo

작성한 질문수

질문하기