피드로 돌아가기
Dev.toFrontend
원문 읽기
Semantic Null Handling을 통한 데이터 무결성 확보 및 런타임 크래시 제거
Common Null Safety Mistakes
AI 요약
Context
Dart의 Sound Null Safety 도입 이후 컴파일 타임의 타입 체크는 강화되었으나, 개발자의 편의 위주 처리로 인한 Semantic Error 발생 가능성 상존. 특히 ??, !, ?. 연산자의 무분별한 사용이 비즈니스 로직의 왜곡과 런타임 예외를 유발하는 기술 부채로 작용함.
Technical Solution
- Repository 계층에서
?? ''사용을 지양하고 Explicit Null Handling을 통한 데이터 유효성 검증 및 전송 로직 설계 - UI Layer에서
!연산자 기반의 강제 언래핑을 제거하고, Meaningful Fallback 값을 제공하는 선언적 UI 상태 관리 적용 - API Request Payload 구성 시
null값을 포함하는 대신, 비어 있는 키를 제외하는 Conditional Map 구성으로 Backend의 데이터 오염 방지 - Nullable Boolean의 모호성을 제거하기 위해
enum기반의 Explicit State Model(예: VerificationStatus)로 도메인 모델 전환 - 비즈니스 의미에 따른 Null 처리 전략 분리: API 호출 시에는 '데이터 부재'의 의미를 보존하고, UI 표시 시에는 '기본값'을 제공하는 계층별 전략 차별화
실천 포인트
- API 요청 전 `?? ''` 처리로 인한 데이터 덮어쓰기 위험이 없는지 확인 - Build 메서드 내 `!` 연산자 사용처를 검색하여 `??` 또는 `if-else` 기반의 Fallback UI로 교체 - `Map<String, dynamic>` 생성 시 `includeIfNull: false` 설정 또는 조건부 키 추가 로직 적용 - Boolean의 3가지 상태(True, False, Unknown)가 필요한 경우 `enum` 도입 검토