day11
SpringShop이라는 프로젝트를 만든다.
Spring Web, Lombok, Thymeleafm Spring Data JPA, Oracle Driver
추가한다.
application properties셋팅 한 후에 기존 꺼에서 복붙을 하는데 확장자명을 .yml으로 바꾼다.
yml야믈 파일이라고 읽는다.
이게 더 편해서 이렇게 많이한다.
열어보면 규칙이 안맞아서 에러가 난다.
우리기준으로 설정파일이 2개가 있다.
원래있던 properties는 안쓸 것이다. 하지만 백업용으로 두려고 _bak를 추가해준다.
이부분은 실무에서 쓸수도있고 아닐 수 도 있지만 알고있으면 깔끔해진다.
근데 이 프로젝트로는 이 설정파일 셋팅하는 것만 하고 이 다음 임베디드 부터는 다시 jpaitem프로젝트에서 진행했다.
jpaitem 프로젝트에서 com.codingbox.japitem.embedded
도메인 패키지에있는 모든 테이블의 @Entity를 주석처리해야한다.
그래야 테이블이 새로 만들어진다.
어떤 한 사람이 있을 때 그 사람의 주소가 집주소가 있을 수 있고, 회사주소가 있을 수 있다.
수 와 문자는 하나의 공간을 갖는다면 클래스및 객체는 원래있던 객체를 바라본다.
이걸 코드에서 본다면 member와 member2가 같이addr이라는 하나의 객체를 바라보고있다.
임베디드를 사용하면 객체 지향적인 설계가 가능하나 이런 점을 고려하지 않으면 부작용이 작용한다.
항상 값을 복사해서 사용하면 공유 참조로 인해 발생하는 부작용을 비할 수 있다.
문제는 임베디드 타입처럼 직접 정의한 값 타입은 자바의 기본 타입이 아니라 객체 타입이다.
자바 기본 타입에 값을 대입하면 값을 복사한다.(int, boolean, 등등 primary type)
객체 타입은 참조 값을 직접 대입하는 것을 막을 방법이 없다.
객체의 공유 참조는 피할 수 없다.
address에서 @Setter를 만들지 않고 객체가필요할 때마다 항상 만들도록하는 방법이 있다.
-> 새로운 객체를 무조건 만들어서 할당하도록 한다.
-> @Setter를 없앤다.
jpaitem프로젝트의 JpaMain5.java에 정리해놓았다.