Notice
Recent Posts
Recent Comments
Link
250x250
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- jsp
- 데이터베이스
- java
- Next.js
- oracle
- 스프링
- spring
- 정리
- 코드테스트
- 오라클
- BACK-END
- node.js
- 자바스크립트
- 코드 테스트
- 쿼리
- 미니정리
- JavaScript
- MySQL
- 백엔드
- 서버
- 디자인 패턴
- 알고리즘
- 스프링부트
- SQL
- 자바
- jpa
- web
- 프런트엔드
- 프로그래머스
- 프론트엔드
Archives
- Today
- Total
참치코더의 꿈 메모장
JPA / 기본값 타입, 임베디드 타입 정리, 불변객체란?, 그에 따른 비교 본문
728x90

기본값 타입 : 자바 기본형 또는 Wrapper 클래스(Integer 등등), String 등
임베디드 타입(복합 타입) : 여러 필드를 묶어 하나의 값 타입처럼 사용하는 것
컬렉션 값 타입 : 값 타입을 Collection에 담아 사용하는 것
임베디드 타입(Embedded Type)
- 여러 속성을 묶어 논리적으로 하나의 값 타입으로 활용하는 것
- 엔티티의 재사용성과 응집도를 높임
- 실제 DB에는 해당 엔티티 테이블에 컬럼으로 펼쳐짐
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
@Embeddable
public class Address {
private String city;
private String street;
private String zipcode;
}
@Entity
public class Member {
@Embedded
private Address address;
}
/*
1. 객체 지향적인 설계가 가능하다. (캡슐화 강화)
2. 재사용성 증가한다.
3. 해당 값 타입에 의미 있는 메서드 추가가 가능하다.(isValid())
*/
|
cs |
값 타입은 참조 공유 하면 안된다...
깂 타입은 엔티티가 아니므로, 공유되면 사이드 이펙트가 발생한다.
|
1
2
3
4
5
|
Address address = new Address("Seoul", "Gangnam", "123");
Member m1 = new Member(address);
Member m2 = new Member(address); // 공유된 값을 변경하면 전체 객체의 값이 변경되는 사이드 이펙트 발생!!!
// -> 따라서 값 타입은 불변으로 만들어야 한다.
|
cs |
값 타입과 불변 객체
불변객체를 만드는 방법
1. Setter 제거한다.
2. 모든 필드를 가능하면 final로 선언한다.
3. 값 변경시 새로운 객체를 생성하는 방식으로 사용한다.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
@Embeddable
public class Address{
private final String city;
private final String street;
private final String zipcode;
public Address(String city, String street, String zipcode){
this.city = city;
this.street = street;
this.zipcode = zipcode;
}
}
// -> 값 변경 시
//address = new Address("Busan", address.getStreet(), address.getZipcode());
|
cs |
값 타입의 비교
동일성 비교(==) : 기본값 타입 비교할때 사용(대략 얕은 비교를 한다.)
동등성 비교(.equals) : 임베디드/컬렉션 값타입 비교시 사용한다.(깊은 비교를 한다.)
-> 뭐든 일단 동등성 비교를 하는 것이 좋고, .equals를 사용하면 반드시 재정의가 필요하다.
(메모리 참조값을 비교하지 않고, 해당 실제 값을 비교)
728x90
'JPA' 카테고리의 다른 글
| JPA / JPA 프로젝션, 페이징 API, JOIN 정리 (0) | 2025.10.29 |
|---|---|
| JPA / 값 타입 컬렉션(Value Type Collection) 정리 (0) | 2025.10.27 |
| JPA / 지연로딩(lazy loading), 즉시로딩(eager loading), 영속성 전이(cascading), 고아객체(Orphan) 정리 (0) | 2025.10.21 |
| JPA / @MappedSuperclass, 프록시 개념 정리 (0) | 2025.10.15 |
| JPA / 상속관계 매핑 (SINGLE_TABLE, JOINED, TABLE_PER_CLASS) (1) | 2025.10.13 |
Comments