티스토리 뷰
### 에러 노트: NullPointerException - 포인트 값이 없을 경우
#### 발생 원인:
- **`NullPointerException` 발생**: `MobilePoint` 객체가 `null`일 경우, `point.getPoint()` 메소드 호출에서 `NullPointerException`이 발생.
- **기존 코드**:
return new PageImpl<>(list.getResults().stream()
.map(tuple -> {
MobileUsers data = tuple.get(userInfo);
MobilePoint point = tuple.get(userPoint);
return new MobileUserDTO.UserListData(
point.getPoint()
);
})
.collect(Collectors.toList()), pageable, list.getTotal());
- **문제**: `point`가 `null`일 때 `point.getPoint()`를 호출하려고 해서 `NullPointerException`이 발생.
- **해결 코드**:
return new PageImpl<>(list.getResults().stream()
.map(tuple -> {
MobileUsers data = tuple.get(userInfo);
MobilePoint point = tuple.get(userPoint);
return new MobileUserDTO.UserListData(
point != null && point.getPoint() != null ? point.getPoint() : 0
// point가 null일 경우 0 반환
);
})
.collect(Collectors.toList()), pageable, list.getTotal());
#### 영향 범위:
- **NullPointerException**: `MobilePoint` 객체가 `null`일 경우, `point.getPoint()` 호출 시 예외가 발생하여 애플리케이션이 중단될 수 있음.
- **데이터 처리 오류**: `point`가 `null`인 경우에도 `getPoint()`를 안전하게 처리하지 않으면, 해당 사용자에 대한 데이터를 처리할 수 없거나, 오류가 발생하여 결과가 정상적으로 반환되지 않음.
#### 주요 프로세스 영향:
1. **데이터 조회 실패**:
- `MobilePoint` 객체가 `null`인 경우, `point.getPoint()` 호출에서 오류가 발생하여, 해당 사용자의 정보가 잘못 처리되거나 조회되지 않음.
2. **응답 지연**:
- 예외가 발생하여 요청이 실패하거나 예외 처리 로직으로 넘어가게 되어, 응답 시간이 지연될 수 있음.
3. **서비스 장애**:
- `NullPointerException`으로 인해 서비스가 중단되거나, 일부 기능이 정상적으로 작동하지 않음.
#### 해결 방안:
1. **`null` 체크 추가**:
- `MobilePoint` 객체가 `null`일 경우, `getPoint()`를 호출하지 않도록 `null` 체크를 추가하여 `NullPointerException`을 방지.
- `point`가 `null`일 경우에는 기본 값(예: `0`)을 반환하도록 처리.
- **수정된 코드**:
return new PageImpl<>(list.getResults().stream()
.map(tuple -> {
MobileUsers data = tuple.get(userInfo);
MobilePoint point = tuple.get(userPoint);
return new MobileUserDTO.UserListData(
point != null && point.getPoint() != null ? point.getPoint() : 0
// point가 null일 경우 0 반환
);
})
.collect(Collectors.toList()), pageable, list.getTotal());
2. **`Optional` 사용**:
- `Optional`을 사용하여 `null` 처리를 더 안전하게 할 수 있음. 예를 들어, `point.getPoint()` 대신 `Optional.ofNullable(point).map(MobilePoint::getPoint).orElse(0)`와 같이 처리할 수 있음.
return new PageImpl<>(list.getResults().stream()
.map(tuple -> {
MobileUsers data = tuple.get(userInfo);
MobilePoint point = tuple.get(userPoint);
return new MobileUserDTO.UserListData(
Optional.ofNullable(point).map(MobilePoint::getPoint).orElse(0)
);
})
.collect(Collectors.toList()), pageable, list.getTotal());
3. **테스트 및 검증**:
- 수정된 코드가 정상적으로 동작하는지 확인하기 위해, `point`가 `null`인 경우와 아닌 경우에 대해 다양한 테스트를 진행.
- 특히 `point`가 `null`일 때 결과가 `0`으로 반환되는지 검증.
4. **로깅**:
- `point`가 `null`인 경우에 대한 로깅을 추가하여, 데이터가 `null`인 이유와 함께 문제를 추적할 수 있도록 함.
- 예시:
if (point == null) {
log.warn("MobilePoint is null for user: {}",data.getId());
}
#### 결론:
`MobilePoint` 객체가 `null`일 경우 `getPoint()` 메소드 호출에서 `NullPointerException`이 발생하는 문제를 해결하기 위해 `null` 체크를 추가하여 안전하게 처리하도록 수정해야 합니다. `Optional`을 사용하면 코드가 더 깔끔하고 안전하게 `null` 값을 처리할 수 있습니다. 이를 통해 애플리케이션이 중단되지 않고 정상적으로 데이터를 처리할 수 있습니다.
'개발 > JAVA' 카테고리의 다른 글
에러 노트: `ResultSet.getInt()`에서 발생한 타입 불일치 오류 (1) | 2024.11.28 |
---|---|
Variable 'userService' might not have been initialized - 오류 (0) | 2023.08.13 |
열거형 (0) | 2023.02.23 |
생성자와 세터의 차이 (0) | 2023.02.10 |
의존성 역전 원칙 (0) | 2023.01.27 |
- Total
- Today
- Yesterday
- 웹개발3주차
- 2주차
- Til
- python
- aihtnyc_h
- 스파르타코딩
- 12기 1주차 숙제
- 지니차트만들기
- PyCharm
- 보험
- 초보개발자
- 항해99
- 아이들팬명록만들기
- 12기
- 팬방명록만들기
- (여자)아이들
- 유형검사
- 사전스터디
- 아이들팬명록
- HTML
- 웹개발
- 웹개발종합반
- 공부하기
- visualstudiocode
- ajax
- 현재기온
- 4주차
- 현재기온넣기
- 항해
- 스파르타
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |