-
정답은 아니지만
불변성 보장을 위한 더 나은 entity를 구성하기 위한 노력 🌱
1. Setter 메서드 사용하지 않기 ⭐
entity는 @Getter어노테이션만 달고 @Setter는 달지 않는 것이 좋다.
객체가 무분별하게 변경될 수 있다. 예를 들면 dirty checking으로 원하지 않을 때 수정이 이루어질 수도 있다.
내부 변수의 값이 변경될때는 의미가 명확한 개별 함수를 통해서만 변경하는 것이 좋다.
빌더패턴을 사용하는 것도 좋다.
2. 기본생성자 선언은 AccessLevel.PROTECTED로 하기
@NoArgsConstructor(access = AccessLevel.PROTECTED) // new로 생성하려 하면 컴파일 에러
EntityManager 가 Entity 를 사용하기 위해선 기본 생성자가 반드시 필요하다.(public 또는 protected)
protected로 정의하면 프로그램 내에 아무곳에서나 무분별한 Entity 생성을 막을 수 있다.
클래스단 @NoArgsConstructor(access = AccessLevel.PROTECTED) + @Builder
-> 모든 필드의 생성자를 요구하기 때문에 에러발생
그렇지만 @AllArgsConstructor를 선언하는 것 보다는 생성자단에 붙이는 것이 낫다.
왜냐하면 @AllArgsConstructor를 선언하면 굳이 객체 내부의 모든 필드에 대한 생성자를 생성하고, 입력 값 순서가 고정되어 있기 때문에 값 입력 실수가 발생하기 쉽기 때문이다.
빌더패턴을 사용하면 순서에 큰 영향을 받지 않아서 안전한 것 같다.
'프로젝트' 카테고리의 다른 글
jpa dto와 entity 빌더 패턴으로 변환하기 (0) 2023.03.11 Github Actions 설정하며 겪은 문제들 (gradle) (0) 2023.03.10 자바 예외처리 @ControllerAdvice 사용해보기 (0) 2023.03.07 JBcrypt 비밀번호 암호화 (0) 2023.03.04 ngrok 사용기 (0) 2023.02.28 댓글