jiisoo
지수로그
jiisoo
전체 방문자
오늘
어제

블로그 메뉴

  • home
  • Github
  • 알고리즘 문제풀이 저장소
  • 분류 전체보기 (80)
    • Java (1)
    • Spring (30)
    • JPA (15)
    • cs (8)
      • 디자인패턴 (1)
      • 네트워크 (5)
      • Database (1)
      • 운영체제 (1)
    • algorithm (18)
      • 알고리즘 & 자료구조 이론 (12)
      • 알고리즘 풀이 (6)
    • 면접 준비 (0)
    • 회고 (5)
      • ATDD (4)
      • 학습테스트로 배우는 spring 2기 (1)
      • 프로젝트 (0)

인기 글

최근 댓글

최근 글

태그

티스토리

hELLO · Designed By 정상우.
jiisoo

지수로그

[Jpa] 값 타입과 불변 객체
JPA

[Jpa] 값 타입과 불변 객체

2023. 6. 19. 15:19
  • 값 타입은 복잡한 객체 세상을 조금이라도 단순화하려고 만든 개념이기 때문에 단순하고, 안전하게 다룰 수 있어야 한다.
  • 임베디드 타입과 같은 값 타입을 여러 엔티티에서 공유할 경우에는 위험하다.
  • 대신 값(인스턴스)를 복사해서 사용할 수 있다.

 

  • 하지만 누군가 실수로 값 복사를 하는 것이 아닌 기존 값을 넣는다면?

 

 

‼️ 객체 타입의 한계 

  • 항상 값을 복사해서 사용하면 공유 참조로 인해 발생하는 부작용을 피할 수 있지만 ,임베디드 타입처럼 직접 정의한 값 타입은 자바의 기본 타입이 아닌 객체 타입이다.
    • 자바 기본 타입에 값을 대입할 경우 값을 복사하지만 
    • 객체 타입은 참조 값을 직접 대입하는 것을 막을 방법이 없어서 객체의 공유 참조는 피할 수 없다.
  • 기본 타입 (primitive type)
int a = 10;
int b = a; // 기본 타입은 값을 복사
b = 4;

 

  • 객체 타입
Address a = new Address("Old");
Address b = a; // 객체 타입은 참조를 전달
b.setCity("New")

 

 

✔︎ 불변 객체 

  • 불변 객체란 객체 생성 이후에 내부의 상태가 변하지 않는 객체이다.
  • 객체 타입을 수정할 수 없도록 부작용을 원천 차단한다.
  • 값 타입은 불변 객체로 설계해야 한다.
  • 생성자로만 값을 설정하고 Setter 를 만들지 않으면 된다.
  • Integer, String 은 자바가 제공하는 대표적인 불변 객체이다.
@Embeddable
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class Address {
    private String city;
    private String street;
    private String zipcode;
}

 

 

 

 

 

<자바 ORM 표준 JPA 프로그래밍 - 기본편 을 참고하여 작성하였습니다.>

 

'JPA' 카테고리의 다른 글

[Jpa] JPQL  (0) 2023.07.21
[Jpa] 값 타입 컬렉션  (0) 2023.06.27
[Jpa] 기본 값 타입  (0) 2023.06.13
[Jpa] 영속성 전이(CASCADE) 와 고아 객체  (0) 2023.06.08
[Jpa] 즉시로딩과 지연로딩  (0) 2023.06.01
    'JPA' 카테고리의 다른 글
    • [Jpa] JPQL
    • [Jpa] 값 타입 컬렉션
    • [Jpa] 기본 값 타입
    • [Jpa] 영속성 전이(CASCADE) 와 고아 객체
    jiisoo
    jiisoo

    티스토리툴바