값 타입

2024. 10. 24. 21:25·Study/Spring

값 타입 분류

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

참고

  1. 기본 값 타입은 공유되지 않는다. (값만 복사할 뿐, 참조해서 가져오지 않는다. / c언어의 *p를 이용한 값 변경을 생각해보자)
  2. 래퍼클래스는 공유 가능한 객체지만 변경할 수 없다. (setter 또는 새로운 객체 생성 등을 이용하여 변경할 수 있지 “=”을 통해 자체적으로 변경할 수는 없다)
    • 클래스 객체 참조 값을 변경 시키키 때문에 변경된 값이 공유될 수 있다.

임베디드 타입

embedded - '내부에 탑재된' 의미를 가지고 있다. 여러 속성등이 나열되어 있는 엔티티를 embedded type 객체로 모아서 관리할 수 있다.

사용법

  1. @Embeddable : 값 타입을 정의 하는 곳에 표시
// 기간 임베디드 타입
@Embeddable
public class Peroid {

  @Temporal(TemporalType.DATE)
  Date startDate;
  @Temporal(TemporalType/Date)
  Date endDate;
  // ...

  public boolean isWork (Date date) {
    // .. 값 타입을 위한 메서드를 정의
  }
}
  1. @Embedded : 값 타입을 사용하는 곳에 표시
// 임베디드 타입 사용
@Entity
public class Member {

  @Id @GeneratedVAlue
  private Long id;
  private String name;

  @Embedded
  private Period workPeriod;    // 근무 기간

  @Embedded
  private Address homeAddress;    // 집 주소
}
  1. 기본 생성자가 필수임.
member.setWorkPeriod(new Period());

임베디드 타입의 장점

  • 재사용성
  • 높은 응집도
  • 임베디드 타입을 포함하고 있는 엔티티의 생명주기에 의존하기 때문에 관리하기 편함

값 타입과 불변 객체

값 타입 공유 참조

임베디드 타입 또한 클래스 객체에 속한다. 따라서 참조를 공유하게 된다면 해당 변경한 객체의 값이 공유될 수 있다. 이를 통해 side effect(갱신 이상)이 발생할 수 있다.

불변 객체의 사용

불변이라는 제약으로 부작용을 막는다는 아이디어

  • 임베디드 타입으로 공유된 객체를 변경, 수정시키는 setter는 사용하지 않고 Builder를 이용해서 새로운 객체를 생성하는 것이 바람직하다
  • 즉 불변 객체로 설계해서 부작용을 원천 차단하는 것이다.

정리

실무에서는 값 컬랙션 보다는 엔티티를 생성한 후 join으로 연관관계를 만들어서 사용하는 경우가 많다.

따라서 값 타입이나 값 컬랙션은 엔티티 하나에서만 소유하고 있고 있거나, 아주 단순한 관계를 맺고 있을 경우에만 사용하는 것이 좋다.

저작자표시 비영리 (새창열림)
'Study/Spring' 카테고리의 다른 글
  • 객체지향 쿼리 언어2 - 중급 문법
  • 객체지향 쿼리 언어1 - 기본 문법
  • 프록시
  • 다양한 연관관계 매핑
Jedo0224
Jedo0224
쟤도 하면 나도 할 수 있다.
    글쓰기
    관리
  • Jedo0224
    JEDO의 개발일지
    Jedo0224
  • 전체
    오늘
    어제
    • Total (48)
      • Develop (0)
      • Study (48)
        • Spring (18)
        • Algorithm (15)
        • Coding-test (13)
        • Java (2)
        • K8s (0)
        • MSA (0)
  • 공지사항

  • 인기 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
Jedo0224
값 타입
상단으로

티스토리툴바