자바 ORM 표준 JPA 프로그래밍 - 값 타입

2021. 8. 21. 09:00· ORM/JPA
목차
  1. 1. 기본값 타입
  2. 1.1 JPA 데이터 타입 분류
  3. 1.2 값 타입 분류
  4. 1.3 기본값 타입
  5. 2. 임베디드 타입
  6. 2.1 임베디드 타입 사용법
  7. 2.2 임베디드 타입의 장점
  8. 3. 값 타입과 불변 객체
  9. 3.1 값 타입의 공유 참조
  10. 3.2 객체 타입의 한계
  11. 3.3 불변 객체
  12. 4. 값 타입의 비교
  13. 5. 값 타입 컬렉션
  14. 5.1 값 타입 컬렉션의 제약사항

이 학습 자료는 김영한님의 인프런 강의를 참고해서 만들었습니다.

 

1. 기본값 타입

1.1 JPA 데이터 타입 분류

  • 엔티티 타입
    • @Entity로 정의하는 객체
    • 데이터가 변해도 식별자로 지속해서 추적이 가능
  • 값 타입
    • 단순히 값으로 사용하는 자바 기본 타입이나 객체
    • 식별자가 없고 값만 있으므로 추적 불가

 

1.2 값 타입 분류

  • 기본값 타입
    • 자바 기본 타입(int, double)
    • 래퍼 클래스(Integer, Long)
    • String
  • 임베디드 타입(복합 값 타입)
  • 컬렉션 값 타입

 

1.3 기본값 타입

  • 생명주기가 엔티티에 의존됨
  • 공유X
    • 자바 기본 타입(primitive type)은 절대 공유X → 값을 복사하여 사용
    • 래퍼 클래스나 String 같은 클래스는 공유는 가능하지만 변경X



2. 임베디드 타입

  • 내장 타입으로도 불림
  • 새로운 값 타입을 직접 정의가 가능
  • 주로 기본 값 타입을 모아서 만들기 때문에 복합 값 타입이라고도 함
  • int, String과 같은 값 타입
  • 임베디드 타입이 null이면 매핑한 컬럼 값은 모두 null이다.

 

2.1 임베디드 타입 사용법

  • @Embeddable : 값 타입을 정의하는 곳에 표시
  • @Embedded : 값 타입을 사용하는 곳에 표시
  • 기본 생성자 필수
  • 한 엔티티에서 같은 값 타입을 사용하려면
    • @AttributeOverrides, @AttributeOverride를 사용해서
      컬러 명 속성을 재정의해야 한다.

 

2.2 임베디드 타입의 장점

  • 재사용이 가능
  • 높은 응집도
  • 의미 있는 메소드를 만들 수 있음
  • 엔티티의 생명주기에 의존
  • 객체와 테이블을 아주 세밀하게 매핑하는 것이 가능
    • 사용하기 전과 후에 매핑하는 테이블은 같음 → 객체 지향적으로 사용이 가능



3. 값 타입과 불변 객체

3.1 값 타입의 공유 참조

  • 임베디드 타입 같은 값 타입을 여러 엔티티에서 공유하면 위험함 → 부작용(side effect) 발생
  • 값 타입의 실제 인스턴스인 값을 공유하는 것은 위험
  • 값(인스턴스)를 복사해서 사용해야 한다. → 새로운 객체에다가 값을 get해온다.

 

3.2 객체 타입의 한계

  • 값을 복사해서 사용하면 공유 참조의 부작용을 막을 수 있다.
  • 임베디드 타입과 같이 직접 정의한 값 타입은 객체 타입이므로 참조 값을 직접 대입하는 것을 막을 방법이 없다. → 공유 참조를 피할 수 없다.

 

3.3 불변 객체

  • 생성 시점 이후 절대 값을 변경할 수 없는 객체
  • 값 타입을 불변 객체로 설계하여 부작용을 차단 해야 한다.
    • 생성자로만 값을 설정하고 Setter를 만들지 않으면 됨.
  • Integer, String은 자바가 제공하는 불변 객체



4. 값 타입의 비교

  • 인스턴스가 달라도 안에 있는 값이 같으면 같은 것으로 봐야 함.
    • 하지만 객체 타입을 비교(==)하면 값 안에 있는 값이 같아도 다르다고 나옴 → equals()메서드 재정의 해서 사용
  • 동일성(identity) 비교 : 인스턴스의 참조 값을 비교, == 사용
  • 동등성(equivalence) 비교 : 인스턴스의 값을 비교, equals() 사용



5. 값 타입 컬렉션

  • 값 타입을 컬렉션에 담아서 쓰는 것을 의미 → 값 타입을 하나 이상 저장할 때 사용
  • 데이터베이스는 컬렉션을 같은 테이블에 저장할 수 없음
    • 별도의 테이블이 필요함 → @ElementCollection, @CollectionTable 사용
  • 기본적으로 지연로딩이면서 영속성 전이 + 고아 객체 제거 기능을 가짐

 

5.1 값 타입 컬렉션의 제약사항

  • 값 타입은 식별자 개념이 없다 → 추적이 어려움
  • 값 타입 컬렉션에 변경 사항이 발생하면, 주인 엔티티와 연관된 모든 데이터를 삭제한 후에, 값 타입 컬렉션에 있는 현재 값을 모두 다시 저장한다.
  • 값 타입 컬렉션을 매핑하는 테이블은 모든 컬럼을 묶어서 기본 키를 구성해야 함. → null 입력X, 중복 저장X 이기 때문에

*※ 실무에서는 값 타입 컬렉션 대신에 일대다 관계를 고려 해야 한다. *

저작자표시 (새창열림)

'ORM > JPA' 카테고리의 다른 글

[JPA] 영속성 전이와 고아 객체  (0) 2022.07.18
자바 ORM 표준 JPA 프로그래밍 - 객체지향 쿼리 언어  (0) 2021.08.22
자바 ORM 표준 JPA 프로그래밍 - 프록시와 연관관계 관리  (0) 2021.08.19
자바 ORM 표준 JPA 프로그래밍 - 고급 매핑  (0) 2021.08.16
자바 ORM 표준 JPA 프로그래밍 - 다양한 연관관계 매핑  (0) 2021.08.15
  1. 1. 기본값 타입
  2. 1.1 JPA 데이터 타입 분류
  3. 1.2 값 타입 분류
  4. 1.3 기본값 타입
  5. 2. 임베디드 타입
  6. 2.1 임베디드 타입 사용법
  7. 2.2 임베디드 타입의 장점
  8. 3. 값 타입과 불변 객체
  9. 3.1 값 타입의 공유 참조
  10. 3.2 객체 타입의 한계
  11. 3.3 불변 객체
  12. 4. 값 타입의 비교
  13. 5. 값 타입 컬렉션
  14. 5.1 값 타입 컬렉션의 제약사항
'ORM/JPA' 카테고리의 다른 글
  • [JPA] 영속성 전이와 고아 객체
  • 자바 ORM 표준 JPA 프로그래밍 - 객체지향 쿼리 언어
  • 자바 ORM 표준 JPA 프로그래밍 - 프록시와 연관관계 관리
  • 자바 ORM 표준 JPA 프로그래밍 - 고급 매핑
쿠엔크
쿠엔크
우아한테크코스 5기 BE 에단 Github : https://github.com/cookienc
쿠엔크
기러기는 기록기록
쿠엔크
전체
오늘
어제
  • 분류 전체보기 (132)
    • CS (46)
      • [OS] (12)
      • [NETWORK] (10)
      • [DATABASE] (11)
      • [BASIC CONCEPT] (1)
      • [DATA STRUCTURE] (7)
      • [ALGORITHM] (5)
    • LANGUAGE (17)
      • [JAVA] (17)
    • DESIGN_PATTERN (2)
    • FRAMEWORK (18)
      • [SPRING] (18)
    • ORM (11)
      • JPA (11)
    • AWS (7)
    • BOOK (10)
      • [자바 웹 개발 워크북] (3)
      • [이펙티브 자바] (7)
    • 개발 (19)
      • [오류] (7)
      • [고민] (1)
      • [우테코] (10)
      • [iTracker] (1)
    • Tip (1)
      • [Plugins] (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 오류
  • CORS
  • aws
  • 자바 웹 개발 워크북
  • ArgumentResolver
  • 운영체제
  • 자료구조
  • JPA
  • java
  • 가비아
  • 데이터베이스
  • Spring
  • 알고리즘
  • JVM
  • HTTP
  • 스프링
  • Effective Java
  • 개념
  • 디자인 패턴
  • 네트워크

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
쿠엔크
자바 ORM 표준 JPA 프로그래밍 - 값 타입

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.