JPA 값 타입 - 기본값 타입

2022. 7. 12. 20:25·공부/JPA
반응형

출처 : 자바 ORM 표준 JPA 프로그래밍 인프런 강의

 

JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다.

 

기본값 타입

JPA 의 데이터 타입 분류

엔티티 타입

  • @Entity로 정의하는 객체
  • 데이터가 변해도 식별자로 지속해서 추적 가능
    ex) 회원 엔티티의 키나 나이 값을 변경해도 식별자(id)로 인식이 가능한 것

값 타입

  • int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체
  • 식별자가 없고 값만 있으므로 변경 시 추적 불가
    ex) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체, 100 -> 200으로 변경되었으면 200이란 값이 과거에 어떤 값이었었는지 추적이 불가능하다.
  • 기본값 타입
    • 자바 기본 타입(int, double)
    • 래퍼 클래스(Integer, Long)
    • String
  • 임베디드 타입(embedded type, 복합 값 타입)
    • ex) X, Y 좌표 값을 합쳐 Position으로 사용하고 싶을 때 사용
  • 컬렉션 값 타입(collection value type)
    • ex) Java 컬렉션에 기본값이나 임베디드 타입을 넣을 수 있는 것

 

기본값 타입

  • 생명주기를 엔티티에 의존
    • ex) 회원을 삭제하면 이름, 나이 필드도 함께 삭제
  • 값 타입은 공유 X
    • ex) 회원 이름 변경 시 다른 회원의 이름도 함께 변경되면 안 된다.
  • 자바의 기본 타입은 절대 공유가 안 된다.
    • int, double 같은 기본 타입(primitive type)은 절대 공유 불가
    • 기본 타입은 항상 값을 복사한다.
    • Integer 같은 래퍼 클래스나 String 같은 특수한 클래스는 공유 가능한 객체이지만 변경 불가
int a = 10;
int b = a;

a = 20;

System.out.println("a = " + a); // 20
System.out.println("b = " + b); // 10

위 코드를 보면 b에 a를 대입했지만 a에 20을 넣은 뒤에는 b는 a의 값을 따라서 20이 되지 않고 10이 된다. 즉, a가 저장되는게 아니라 a가 갖고 있는 10이라는 값이 복사가 되어 b에 저장된다.

 

Integer a = new Integer(10);
Integer b = a;

a.setValue(20); // 에러가 발생하지만 setValue라는게 있다고 가정해보자.

System.out.println("a = " + a);
System.out.println("b = " + b);

컬렉션의 경우 b에 a를 저장하면 a의 래퍼런스가 저장되어 a가 복사되지만 setValue()처럼 값을 변경할 수 있는 방법이 없어 사이드 이펙트가 발생하지 않는다. 

반응형
저작자표시 비영리 변경금지 (새창열림)
'공부/JPA' 카테고리의 다른 글
  • JPA 값 타입 - 값 타입과 불변 객체
  • JPA 값 타입 - 임베디드 타입
  • JPA 프록시와 연관관계 - 영속성 전이(CASCADE)와 고아 객체
  • JPA 프록시와 연관관계 - 즉시 로딩과 지연 로딩
데부한
데부한
어차피 할 거면 긍정적으로 하고 싶은 개발자
    반응형
  • 데부한
    동동이개발바닥
    데부한
  • 전체
    오늘
    어제
    • 분류 전체보기 (307)
      • 방통대 컴퓨터과학과 (27)
        • 잡담 (9)
        • 3학년1학기 (17)
      • 프로젝트 및 컨퍼런스 회고 (1)
        • 프로젝트 (4)
        • 한이음 프로젝트 (0)
        • 회고 (3)
      • 공부 (165)
        • Spring (37)
        • JPA (71)
        • 인프런 워밍업 클럽_BE (10)
        • Java (6)
        • React.js (27)
        • 넥사크로 (11)
        • 기타 (3)
      • 알고리즘 (85)
        • 알고리즘 유형 (10)
        • 알고리즘 풀이 (57)
        • SQL 풀이 (18)
      • 에러 해결 (13)
      • 잡담 (7)
        • 국비교육 (2)
        • 구매후기 (5)
        • 진짜 잡담 (0)
  • 블로그 메뉴

    • Github
    • Linkedin
    • 홈
    • 방명록
    • 글쓰기
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    토비의스프링부트
    Java
    자바스크립트
    운영체제
    스프링부트
    넥사크로
    springboot
    방통대
    egov
    MSA
    알고리즘
    프론트엔드
    SpringBoot를 이용한 RESTful Web Service 개발
    전자정부프레임워크
    개발자
    토이프로젝트
    RESTful
    react
    백준
    IT
    인프런
    기출문제
    QueryDSL
    SQL
    에러해결
    프로그래머스
    코딩테스트
    oracle
    Spring
    JPA
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
데부한
JPA 값 타입 - 기본값 타입
상단으로

티스토리툴바