[Solo Project] 정보 수정 시 수정하지 않은 값이 초기화되는 문제(ofNullable())
2023. 8. 2. 15:00
🧑🏻💻 to-do App 프로젝트
✔️ ToDoService 중 update 부분
→ 기존에 저장된 데이터를 가져와 내용, 순서, 완료여부를 수정할 수 있도록 구현했다. 하지만 막상 실행하고 수정해 보니 수정되는 값을 제외하고 디폴트 초기값으로 변경되는 것이었다.
✔️ Postman으로 todo를 등록하고 수정한 모습
→ 처음에는 수정되는 값과 id를 제외하고 다 디폴트 초기값으로 변경된다고 생각했는데 디버깅을 통해 유일한 int 타입인 todoOrder 에서의 문제인 것을 알게 되었다.
→ 뭐가 문제인지를 모르겠어서 디버깅을 몇 번이나 돌려보고 수업 진행 시 받았던 solution 코드에서 비슷한 부분을 찾아 또 다시 디버깅을 돌려본 결과 유일한 차이점이 타입이라는 것을 알아냈다. 그리고 Optional.ofNullable() 이 int 타입의 0을 null로 판단을 해주느냐? 라는 생각이 들었다.
→ 그래서 찾아본 ofNullable()
"Optional.ofNullable()" 메서드는 Java 8 이상에서 도입된 Optional 클래스의 정적 메서드로, 'null'이 아닌 값을 Optional 객체로 감싸는 역할을 한다.
즉, 값이 null이 아닌 경우에만 값을 Optional로 감싸서 반환을 한다는 말인데 그렇다면 int는 null을 허용하지 않는 primitive(원시적인) 타입이기 때문에 직접 인자로 받을 수 없다는 얘기가 된다.
결론은 애초에 int 타입인 todoOrder 는 다른 값들처럼 Optional 객체로 감싸주지 못한다는 것이다. 그래서 그냥 단순하게 생각하고 삼항 연산자로 처리를 해주었다.
'Error Handling Log' 카테고리의 다른 글
[Error] Spring Dto 클래스에 Getter 가 필요한 이유 (0) | 2023.08.12 |
---|---|
No candidates found for method call useJUnitPlatform (0) | 2023.07.02 |
[코딩테스트] incompatible types: String cannot be converted to boolean (0) | 2023.06.26 |
AOP 부분 적용 안 되는 문제 --> 포인트컷 (0) | 2023.06.08 |
Exception in thread "main" java.util.ConcurrentModificationException (0) | 2023.05.18 |