본문 바로가기

전체 글

(125)
오늘의 질문 : Java의 Enum은 왜 생성자가 있는가? 자바의 Enum엔 특이하게도 생성자가 있다. 내가 주로 다루던 C++과는 다른 사용법이다. 일반적으로 Enum의 사용법은 상수를 열거하여 표현해야 할 때 주로 사용한다. 연관있는 상수들을 응집시키지 않고 열거하기만 하면 소스코드가 지저분해지고, 가독성이 떨어지기 때문이다. 자바에서는 왜 Enum에 생성자를 넣었을까. 이유를 알아보기 위해 C++의 Enum을 살펴보자. C++에서는 Enum에 상수 값만 할당할 수 있다. enum Type { TYPE1 = 1, TYPE2, TYP3 } 그런데, 정수가 아닌 문자열을 할당하고 싶다면? enum TYPE { TYPE1 = 1, TYPE2, TYPE3 } String TypeConverter(Type type) { switch(type) { case TYPE.T..
오늘의 질문 : JPA 엔티티 수정 방식 Q. jpa에서 조회한 엔티티를 업데이트할 때 실무에선 어떤 방식으로 업데이트하시는지 궁금합니다. 1. 엔티티 내부에 id를 제외한 모든 파라미터를 받는 수정자 메서드를 생성 2. builder로 객체를 clone하고, 빌더를 이용한 수정자 메서드 생성 3. 업데이트할 필드의 내용으로 새 엔티티를 생성하고, id를 복사 불변, 신뢰성때문에 되도록이면 수정자 메서드를 넣지 않고, 식별자를 copy하여 객체를 새로 만드는 방식을 생각했었는데, 답변을 보니 생각이 달라졌다. 고찰 : 1. 도메인 로직에 수정 메서드를 넣고, 수정하는 책임을 지게 하는게 깔끔하다. 2. 불변이 꼭 만능은 아니며, jpa의 엔티티 논리적 동치관계는 ID로 하기 때문에, 굳이 새로만들어서 불변성 보장을 시도하지 않아도 된다. 3. ..
DDD를 위한 일대다 연결관계 매핑 요구사항 정의 시험은 N개의 문제를 가진다. 문제 등록은 시험이 있어야 가능하다. 문제의 생성, 수정, 삭제, 조회는 시험을 통해서만 가능하다. 시험이 삭제되면, 문제들도 삭제된다. 시험과 문제는 각각 유니크한 식별자를 가진다. 하위 엔티티들을 관리하기 위한 전략 시험에 있어서 문제는 관리해야 할 하위 엔티티이다. 시험을 통해서만 문제가 등록되도록 영속성 전이 옵션 (cascade)을 사용한다. 생성, 수정, 삭제의 관점에서 보자. 생성은 상위 엔티티의 컬렉션에 하위 엔티티를 넣어 영속 상태로 만들면 JPA에서 insert 해준다. 수정은 조회 후 컬렉션의 원소를 수정하여 영속 상태로 만들면 JPA에서 update 해준다. 삭제는 조회 후 컬렉션의 원소를 삭제하여 영속 상태로 만들면 JPA에서 delet..