JPA구현체에서(Hibernate) 엔티티를 다룰 때
1. DB에서 row 읽기
2. 1의 결과를 자바 객체로 만들기
3. 그런데 그 객체를 만들 때 내가 작성한 생성자를 직접 호출하는 게 아니고, 프레임워크가 리플렉션을 사용해서 new를 대신 해준다.
이 때 기본 생성자가 필요한 것이다.
프록시(proxy)
개발자는 코드를 작성할 때 타입이 다 정해진 상태에서 코딩한다. 하지만 프레임워크는 어떤 클래스를 다뤄야 할지 미리 모르는 경우가 많다.
문자열이나 메타데이터로 클래스 이름만 알고 있는 경우가 많다.
그 클래스 안에 어떤 필드, 메서드가 있는지 runtime에 확인해야 한다. 이걸 가능하게 해주는 게 바로 리플렉션이다.
Class<?> clazz = Class.forName("com.example.Member");
// 기본 생성자 가져오기
Object obj = clazz.getDeclaredConstructor().newInstance();
System.out.println(obj);
@Configuration
public class BaseInitData {
@Autowired
private PostService postService;
// ↓
...
@Configuration
public class BaseInitData {
private final PostService postService;
@Autowired //생성자 주입의 경우 생략 가능하다.
public BaseInitData(PostService postService) {
this.postService = postService;
}
...
// ↓
@Configuration
@RequiredArgsConstructor
public class BaseInitData {
private final PostService postService;
...