엔티티 : Entity

질문(Question)
답변(Answer)

- 필요한 속성
	1. 질문(Question)
		속성이름        설명
		- id            질문 데이터의 고유번호
		- subject       질문 데이터의 제목
		- content       질문 데이터의 내용
		- createDate    질문 데이터의 작성일시
	
	2. 답변(Answer)
		속성이름            설명
		- id                답변 데이터의 고유번호
		- question          질문 데이터 
												-> 어떤 질문의 답변인지 알아야함
		- content           답변 데이터의 내용
		- createDate        답변 데이터의 작성일시	

Entity에서는 Setter를 지양해야하는 이유

그렇다면 어떤 방식으로 Set 해야 할까

  1. 사용용도의 의미가 담긴 메서드를 사용하는 방법이있다

    <aside> 👉 ex)

    public class Post{

    private Long id;

    private String name;

    public void update(Long id, String name){

    this.id = id;

    this.name = name;

    }

    }

    post.update(1, “수정”);

    </aside>

  2. 빌더 패턴 사용(생성자)

    <aside> 👉 @Builder

    public class Post{

    private Long id;

    private String name;

    }

    Post post = Post.builder().id(1).name(”수정”).build();

    </aside>

추가

<aside> 👉 @NoArgsConstructor(access = AccessLevel.PROTECTED) 생성자의 접근제어자를 Protected 설정하여 무분별한 객체 생성을 방지 할 수 있다 .

</aside>

<aside> 👉 생성자를 private으로 선언하면 안되는 이유

private 접근제한자로 선언하게 된다면 JPA에서 오류를 발생시킨다. 이로 인해 JPA에서 프록시 객체를 만들어 해당 프록시 객체가 직접 만든 class 객체를 상속하기 때문에

public 이나 protected 까지만 허용이 된다

</aside>