inflearn logo
강의

講義

知識共有

トビーのクリーン・スプリング - ドメインモデルパターンとヘキサゴナルアーキテクチャ Part 1

Member ドメインコードの改善

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

278

Dompoo

投稿した質問数 14

3

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

 

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

 

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

java spring spring-boot jpa 리팩토링 ddd

回答 1

4

tobyilee

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

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

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

도메인 모델에서 관계와 규칙을 구분하는 방법

0

33

2

헥사고날 아키텍처에서의 배치, 시큐리티, 비동기 이벤트 처리는 어떻게 하나요?

0

109

2

어댑터에서 도메인에 직접 의존하는 경우에 대해

0

112

2

Member 도메인이 PasswordEncoder를 받는 구조 질문 있습니다.

0

98

2

MemberService와 EmailSender 책임 분리에 대한 질문

0

100

2

NonNullApi를 NullMarked로 대체하라고 합니다.

0

120

2

39. 문서와 코드 다듬기 updateInfo 테스트 질문 있습니다.

0

70

2

Repository Adapter 설계에 대해 피드백을 부탁드립니다

0

102

2

헥사고날 part2 강의 출시 예정일 문의 드립니다.

0

242

2

PT 문의사항

0

95

1

초기 어플리케이션 구동 시 compose.yml 파싱 오류

0

146

2

애플리케이션의 JPA 리턴과 도메인 모델

0

124

2

애그리거트 루트의 하위 도메인들의 depth가 깊어질 때 문의

0

132

2

페이징 처리를 해야한다면 어떻게 해야할까요?

0

185

2

애그리거트의 repository

0

115

2

Domain Expert가 정확히 어떤 역할을 하는 사람인가요?

0

224

1

회원 애플리케이션 서비스 테스트 (1)

0

101

2

정적 팩토리 메서드 관련 질문드립니다!

0

102

2

spotbug + @NonNullApi 로만 Null 방어가 될까요?

0

125

2

required 포트에 관해서

0

87

2

혹시 다음 편은 언제쯤 오픈할까요?

0

161

2

서비스 단위 테스트 코드 작성

0

92

2

domain 모듈에 entity를 정의한다고 했을때

0

91

2

여러 엔티티의 조합으로 리포트를 제공해야할 때

0

75

2