직렬화 및 역직렬화
- Primitive 타입의 한계: Java의 기본형(primitive type)은 null 값을 가질 수 없다. 예를 들어, int, long, boolean 같은 타입은 null이 될 수 없으므로, 직렬화 시 null을 표현해야 할 경우 문제가 발생할 수 있다.
- Wrapper 클래스의 유연성: 기본형에 대응하는 Wrapper 클래스(Integer, Long, Boolean 등)를 사용하면, null 값도 가질 수 있기 때문에 직렬화/역직렬화 과정에서 발생할 수 있는 문제를 방지할 수 있다. 이는 데이터베이스에서의 NULL 값을 표현하거나, JSON 직렬화 시 값이 없음을 표현할 때 유용하다.
DTO와 Entity의 설계
- DTO의 표현 유연성: DTO는 주로 데이터 전송을 위한 객체로, 클라이언트와 서버 간의 데이터 교환을 목적으로 한다. 이때 값이 없을 수 있는 경우를 위해 Wrapper 클래스를 사용하는 것이 더 안전하며, 프론트엔드에서 null 처리를 보다 쉽게 할 수 있다.
- Entity의 데이터베이스 연관성: Entity 클래스는 데이터베이스와 직접적인 매핑을 가지며, 데이터베이스의 컬럼이 NULL 값을 가질 수 있는 경우, 이를 적절히 표현하기 위해 Wrapper 클래스를 사용하는 것이 일반적이다.
기본형과 Wrapper 클래스의 차이
- 기본형: 메모리 사용 효율이 좋고, 성능상 이점이 있지만 null을 가질 수 없다는 한계가 있다.
- Wrapper 클래스: null 값 표현이 가능하여, 기본형보다 유연하지만, 메모리 사용량이 증가하고, 성능이 떨어질 수 있다. 하지만, 직렬화/역직렬화나 데이터베이스의 NULL 값 처리를 고려하면 Wrapper 클래스를 사용하는 것이 적절하다.
'Development > TIL' 카테고리의 다른 글
[TIL] Spring Data Cassandra와 Spring Data JPA의 차이? (NoSQL과 RDBMS의 차이) (0) | 2024.09.28 |
---|---|
[TIL][Spring] Spring Webflux의 Spring Security (@EnableWebFluxSecurity), ReactiveSecurityContextHolder (2) | 2024.09.11 |
[TIL] Kafka와 RabbitMq의 철학, 그리고 어떻게 철학을 달성했을까? (0) | 2024.08.17 |
[TIL] Redis 캐싱을 사용해야 할 때 주의해야 하는 점 (0) | 2024.08.15 |
[TIL] 다시 배우는 Docker (0) | 2024.08.09 |