일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 알고리즘기본개념
- 트러블슈팅
- Java
- 다시보기
- 그래프
- BFS
- 그리디
- JUnit
- SSAFY
- database
- SWEA
- 백준
- 부분수열의합2
- 싸피
- 코딩테스트실력진단
- 완전탐색
- 자바
- DFS
- JPA
- 코테
- Spring
- Union Find
- 다익스트라
- 기본유형
- 알고리즘
- DP
- 완탐
- 코딩테스트
- 코드트리
- 유니온파인드
- Today
- Total
HwangHub
[Spring] entity field에 wrapper class를 사용하는 이유 본문
많은 이들이 김영한님의 JPA 강의를 시작으로 스프링 첫걸음을 떼기 때문에, 자연스럽게 엔티티 모델링을 진행할 때 wrapper class를 사용하는 것이 익숙할 겁니다.
하지만 한번쯤은 고민해볼 필요가 있는 것이 wrapper class 사용의 이유 입니다.
왜 우리는 지금까지 wrapper class로 필드를 구성해온 것일까요?
Wrapper class
wrapper class는 자바가 기본적으로 제공하는 원시 타입의 자료형을 '객체'로서 사용하기 위해 고안된 클래스입니다. 여기서 우리가 주목해야 할 차이점은 wrapper class는 초기화하지 않으면 null이 되지만, 원시 타입은 0과 같이 기입된다는 점입니다. 즉, 원시 타입으로 엔티티 필드를 구성하면 null 가능성이 아예 차단되는데, wrapper class로 필드를 구성하면 nullalble하게 처리할 수 있습니다.
Primitive type field
원시 타입으로 필드를 구성할 수도 있습니다. 만약 id 값을 Long이 아닌 long으로 설정하게 되어도 전혀 문제될 게 없을까요?
우선 빌드나 실행은 원활하게 됩니다. 하지만 Hibernate의 공식 문서에서는 Wrapper class와 같이 nullalble한 non-primitive type 사용을 권장하고 있습니다.
데이터는 정확해야 합니다. 만약 원시 타입을 사용하게 되면 null 가능성이 없기 때문에 실제로 데이터가 존재하지 않아도 0과 같은 데이터가 자동으로 기입됩니다. 하지만 없으면 없다고(null) 표기하는게 당연히 더 정확한 표기일 겁니다. 그리고 런타임에서 조회하는 데이터가 DB에 존재하지 않으면 NPE을 유발시키고, 이를 핸들링하는게 더 맞는 프로세스라고 생각합니다. 하이버네이트에서도 이러한 이유로 nullable한 타입을 사용하길 권장하는 거라고 생각합니다(뇌피셜). 하물며, null이여서는 안되는 필드가 있다면 애초부터 nullable=false를 이용하여 처리하면 되기 때문에 원시 타입을 사용할 이유가 없다고 생각합니다.
'무엇을 합니다 > 기술이해' 카테고리의 다른 글
[JUnit] MockMVC로 Controller 테스트하기 (0) | 2023.07.26 |
---|---|
[이펙티브자바] @Builder를 클래스 레벨이 아닌 생성자 레벨에 사용 (0) | 2023.07.25 |
[Spring] profiles 설정 (spring boot 2.4 버전 이후) (0) | 2023.07.20 |
[Java] 객체(Object) vs. 클래스(Class) vs. 인스턴스(Instance) (스크랩) (0) | 2023.07.20 |
[Gradle] java-library 플러그인, implementation()과 api() 차이 (0) | 2023.07.17 |