상황
OrderMenu 엔티티의 totalPrice 필드는 Long 타입으로 선언되어 있다. 그런데 OrderService에서 총 가격을 계산하는 로컬 변수는 long으로 선언했다. 코드 리뷰 중 엔티티와 서비스 레이어의 타입이 달라 혼란스러울 수 있다는 생각이 들었다.

나의 선택
서비스 레이어의 로컬 변수는 원시 타입 long을 유지하기로 했다.
이유
엔티티 필드에 Long을 쓰는 이유는 null을 허용해야 하기 때문이다. JPA는 DB 컬럼의 null 값을 매핑할 때 래퍼 타입을 요구한다. 반면 서비스 레이어의 로컬 변수는 계산을 위한 임시값이라 null이 발생할 여지가 없다.
원시 타입은 래퍼 타입보다 메모리 효율이 좋고 오토박싱 비용도 없다. 실무에서도 null이 필요 없는 로컬 변수에는 원시 타입을 쓰는 것이 일반적이다.
다만 updateTotalPrice(totalPrice) 호출 시 long에서 Long으로 오토박싱이 발생한다. 이 부분은 성능에 큰 영향을 주지 않으며, 명시적으로 드러나는 비용이므로 감수할 수 있다고 판단했다.
'Projects > [Spring] Coffee Shop Project' 카테고리의 다른 글
| [트러블슈팅] JSON 응답 필드 순서 고정하기 (JsonPropertyOrder) (0) | 2026.04.03 |
|---|---|
| [트러블슈팅] : data.sql 실행 시 Table doesn't exist 오류 해결하기 (0) | 2026.04.03 |
| 트러블슈팅 : MySQL Access Denied 오류 해결하기 (0) | 2026.04.02 |
| 트러블슈팅: redisson-spring-boot-starter Spring Boot 4.x 호환성 오류 (0) | 2026.04.02 |
| API 명세서 만들어보기 (3) | 2026.04.01 |