티스토리 뷰
반응형
JPA의 데이터 타입을 분류한다면 엔티티 타입
과 값 타입
나눌 수 있다.
엔티티 타입은 @Entity
로 정의하는 객체이고, 값 타입은 int
, String
처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체를 말한다.
값 타입은 다음 3가지로 나눌 수 있다.
- 기본 값 타입
- 차바 기본 타입(int, double ...)
- 래퍼 클래스(Integer ...)
- 임베디드 타입
- 컬렉션 값 타입
임베디드 타입
새로운 값 타입을 직접 정의해서 사용할 수 있는 값 타입의 일종으로 객체와 테이블을 세밀하게 매핑하는 것이 가능하다.
또한 정의한 값 타입에 의한 재사용성과 높은 응집도를 가질 수 있다.
엔티티 타입
특징
- 식별자(
@Id
)가 있다.- 엔티티 타입은 식별자가 있고 식별자로 구별 할 수 있다.
- 생명 주기
- 생성하고, 영속화하고, 소멸하는 생명 주기가 있다.
- em.persist(entity);
- em.remove(entity);
- 공유할 수 있다.
- 참조 값을 공유할 수 있다.
값 타입
특징
식별자가 없다.
생명주기를 엔티티에 의존한다.
- 스스로 생명주기를 가지지 않고 엔티티에 의존한다. 의존하는 엔티티를 제거하면 같이 제거된다.
공유하지 않는 것이 안전하다.
- 엔티티 타입과는 다르게 공유하지 않는 것이 안전하며, 대신에 값을 복사해서 사용해야한다.
- 오직 하나의 주인만이 관리해야한다. (참조값에 의한 값 변경)
- 불변 객체로 만드는 것이 안전하다.
문제
값 타입은 여러 엔티티에서 공유할 수 없다. 하나의 엔티티에서 값을 변경할 경우
같은 참조값을 바라보고 있는 엔티티에서 원하는 값이 나오지 않는다.
이 문제를 개선할 수는 없을까?
값 복사(clone)
객체를 복사하여 사용하면 새로운 참조값으로 값을 변경할 수 있고 공유참조로 인한 부작용을 피할 수 있다.
그러나 이 방법도 임시적인 방법일 뿐 이며 근본적인 문제는 해결할 수 없다.
불변 객체 선언
객채를 불변하게 만들면 값을 수정할 수 없으므로 부작용을 원천 차단할 수 있다.
불변 객체
란 한번 만들면 절대 변경할 수 없는 객체를 말하며 조회는 가능하지만 수정은 할 수 없다.
불변 객체를 구현하는 방법중 하나는 생성자로만 값을 설정하고 수정자(Setter
)를 구현하지 않으면 된다.
반응형
'JPA' 카테고리의 다른 글
JPA - 상속 관계 매핑 (0) | 2022.06.24 |
---|---|
프록시 (0) | 2022.05.14 |
JPA 에서의 식별과 비식별 (0) | 2022.05.12 |
ORM에서의 객체 연관 매핑 (0) | 2022.05.11 |
SQL Mapper vs ORM (0) | 2022.05.10 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 자바
- 매트랩
- Matlab
- C언어
- Solid
- springboot
- JPA
- nginx
- 백준
- docker
- 자격증
- OOP
- 알고리즘
- Algorithm
- java
- interview
- ajax
- 수학
- 디자인패턴
- 스프링부트
- Spring
- 면접
- CS
- kakao
- 스프링
- 릿코드
- 프로그래머스
- spring-cloud
- security
- 그래프
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함