목록BE (354)
오봉이와 함께하는 개발 블로그
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bD0zkf/btrF2NUOsll/swt1h2m4f8WcUBgPUIrPz0/img.png)
값 타입 컬렉션 값 타입을 컬렉션에 담아서 사용하는 것을 값 타입 컬렉션이라 한다. 객체로 구현하는 것에는 어려움이 없지만, 문제는 DB 테이블로 구현할 때다. 단순하게 값 타입이 하나일 때는 필드 속성으로 테이블에 넣으면 됐지만 컬렉션을 사용할 때는 얘기가 달라진다. DB는 컬렉션을 담을 수 있는 구조가 존재하지 않기 때문이다. 그래서 클래스 안에 컬렉션이 객체로 존재하면 별도의 테이블을 생성해 1:N 관계로 풀어내야 한다. 값 타입 컬렉션은 식별자를 하나 더 넣어서 PK로 사용하게 된다면 그건 더이상 값 타입이 아니라 엔티티가 되기 때문에 테이블을 생성하고 안에 모든 컬럼들을 다 묶어서 하나의 PK로 만들어내야 한다. 저장 예제 @ElementCollection @CollectionTable(name..
값 타입의 비교 값 타입은 인스턴스가 달라도 그 안에 값이 같으면 같은 것으로 봐야 한다. int a = 10; int b = 10; // a == b -> true 값이 들어있기 때문에 참 Address a = new Address("city"); Address b = new Address("city"); // a == b -> false 참조가 들어있기 때문에 거짓 동일성(identity) 비교 인스턴스의 참조 값을 비교, == 사용 동등성(equivalence) 비교 인스턴스의 값을 비교, equals() 사용 값 타입은 a.equals(b)를 사용해서 동등성 비교를 해야 한다. 하지만 equals()메소드의 기본은 ==을 사용하기 때문에 Override를 해야 한다. // command + n +..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cqoaKg/btrFXXQ4fty/R5uGu0ZAwikm3XSWv6blE0/img.png)
값 타입과 불변 객체 값 타입은 복잡한 객체 세상을 조금이라도 단순화하려고 만든 개념이다. 따라서 값 타입은 단순하고 안전하게 다룰 수 있어야 한다. 값 타입 공유 참조 임베디드 타입 같은 값 타입을 여러 엔티티에서 공유할 수는 있지만 공유하면 위험하다. 다음과 같이 있을 때 OldCity를 NewCity로 변경하면 회원1과 회원2 모두 NewCity로 값이 바뀌게 된다. Address address = new Address("city", "address", "10000"); Member member1 = new Member(); member1.setName("member1"); member1.setHomeAddress(address); em.persist(member1); Member member2 =..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/xp0J3/btrF1DXl9Wr/sAjksyVa3NeiWT24MUb4H1/img.png)
임베디드 타입 새로운 값 타입을 직접 정의할 수 있다. JPA는 임베디드 타입(embedded type)이라 한다. 주로 기본 값 타입을 모아서 만들기 때문에 복합 값 타입이라고도 한다. int, String과 같은 값 타입 예를 들어 회원 엔티티는 아래와 같은 값을 가진다. (이름, 근무 시작일, 근무 종료일, 주소 도시, 주소 번지, 주소 우편번호) 간단하게 작성하면 회원 엔티티는 아래와 같은 값을 가진다. (이름, 근무 기간, 집 주소) ERD는 다음과 같다. 임베디드 타입 사용법 @Embeddable : 값 타입을 정의하는 곳에 표시 @Embedded : 값 타입을 사용하는 곳에 표시 기본 생성자는 필수다. 장점 재사용 높은 응집도 Period.isWork()처럼 해당 값 타입만 사용하는 의미 있..
기본값 타입 JPA의 데이터 타입 분류 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 예 : 회원 엔티티의 값을 변경해도 식별자로 인식 가능 값 타입 int, String, Integer 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경시 추적 불가 예 : 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 값 타입 분류 기본값 타입 자바 기본 타입(int, double) 래퍼 클래스(Integer, Long) String 임베디드 타입 embedded type, 복합 값 타입 클래스를 만들어 원하는 값을 사용할 수 있게 커스텀 할 수 있는 타입 컬렉션 값 타입 자바 컬렉션(List, Set 등)에 기본 값이나, 임베디..