JPA 의 Entity 가 기본생서자를 필요로 하는 이유

알파로그·2023년 3월 21일
0

Spring Boot

목록 보기
21/57

JPA 의 Entity 는 반드시 public 또는 protected 로 선언된 기본생성자가 필요하다.


✏️ Setter 를 사용하면 안되는 이유

Entity 의 모든 필드에 대해 Setter 를 생성하고, 기본생성자를 public 으로 선언할 경우,

개별 단위로 필드가 자유롭게 수정될 수 있기때문에

다른 팀원, 혹은 시간이 흐른후 자신이 봐도 그 의도를 파악하기 어렵고, 객체의 일관성을 보장할 수 없다.


Setter 를 생성하는 것 보다 별도의 Business method 를 생성하는 것이 누가 보더라도 의도를 쉽게 파악할 수 있고,
일관성을 유지할 수 있다.


✏️ Entity 에 기본생성자가 필요한 이유

JPA 의 구현체인 hibernate 에서 제공하는 다양한 기능은

개발자가 만든 Entity 자체에서 작동되지 않고 hibernate 가 만든 proxy 객체에서 진행되는데,

proxy 객체를 생성하기 위해서 hibernate 는 Entity 의 기본생성자를 통해서 만들게 된다.

이때 public 으로 모든 계층에 생성자를 열어두면 Setter 를 사용했을 때 와 비슷한 문제가 발생해,

hibernate 만 생성자를 쓸 수 있게 protected 로 보호해주어야 된다.

profile
잘못된 내용 PR 환영

0개의 댓글