JPA 값 타입은 불변객체여야한다.
임베디드 타입을 포함한 모든 값 타입은 불변객체여야 한다.(값을 변경할 수 없는 객체, 생성자 또는 정적팩터리 메서드를 만들어 인스턴스를 생성한 이후에 setter 등으로 값을 변경할 수 없어야함)
값타입은 참조가 달라도 그 안에 값이 같으면 같은 것으로 봐야하므로 equals()를 재정의 해줘야한다.
값 타입 컬렉션
@ElementCollection, @CollectionTable 을 통해 지정해준다. 값 타입 컬렌션읜 영속성 전이(Cascade) 와 고아 객체 제거 기능을 필수로 가진다.(라이프사이클을 주인 객체에 의존). 기본적으로 지연 로딩으로 설정되어있다.
다 정리하면 엔티티 타입 객체는 스스로 라이프사이클을 관리하지만 값 타입은 모든 것을 주인 객체에 의존한다.
값 타입 컬렉션에 변경 사항이 발생하면, 주인 엔티티와 연관된 모든 데이터를 삭제하고, 값 타입 컬렉션에 있는 현재 값을 모두 다시 저장한다.
특정상황에서 간단한 상황에서 사용한다고 하는데 아직 그 상황이 직관적으로 느껴지진 않는 것 같다. 일단 앞으로 개발할 때 엔티티로 개발해보고 값타입이 더좋을 상황이 있을지 생각해 봐야겠다.
참고
https://www.inflearn.com/course/ORM-JPA-Basic/dashboard
프로그래머스 level 2 - 더 맵게
https://programmers.co.kr/learn/courses/30/lessons/42626
힙과 관련된 문제였는데 Java.util 에 PriorityQueue를 활용해서 아래와 같이 풀 수 있었다.
- 원소를 추가하는 offer(), add() 두가지 메소드가 있는데 add() 에서 결국 offer()를 호출하기 때문에 아무거나 써도 상관없다.
- 만약 최대힙을 구현하고자 한다면 아래와 같이 선언한다.
PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder());
가장 우선순위에 있는 값을 제거하고 반환하는데에는 poll(), remove() 메소드가 있다. poll은 만약 큐가 비어있으면 null을, remove는 NoSuchElementException 예외를 발생시킨다. remove 메소드를 보면 내부에서 poll()을 호출하고, 반환값이 null 이면 예외를 던지는 것을 확인할 수 있다.
조건문의 연산순서 참고
https://jeong-pro.tistory.com/138
'TIL' 카테고리의 다른 글
[TIL 2022-3-6] 평범한 배낭 (0) | 2022.03.07 |
---|---|
[TIL 2022-2-28]스프링 부트와 AWS로 혼자 구현하는 웹 서비스 (0) | 2022.02.28 |
[TIL 2022-2-25] JPA, DFS (0) | 2022.02.25 |
[TIL 2022-02-23] 지연로딩, 순열 알고리즘 (0) | 2022.02.24 |
[TIL 2022-02-22] JPA 프록시에 대해서, Set의 equals (0) | 2022.02.23 |