이 글은 김영한의 [실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발]을 수강하며 정리한 글입니다.
🟦 기본 환경: IDE: IntelliJ, Language: Java
매개변수가 있는 생성자를 사용할 경우, 기본 생성자가 자동으로 만들어지지 않음
🚨 JPA에서 Entity 생성 시, 매개변수가 있는 생성자를 만들 경우, 기본 생성자를 필수적으로 기재해야함
→ JPA는 DB 값을 객체 필드에 주입할 경우, "기본 생성자"로 객체를 생성한 이후 "Reflection API"를 사용하여 값을 매핑
→ Reflection API는 생성자의 인자정보는 갖고 올 수 없으므로 매개변수가 있는 생성자 작성 시, 기본 생성자를 작성하여 객체를 생성할 수 있는 환경을 제공해야 함
⭐ Reflection API: 클래스 타입을 알지 못하더라도 해당 클래스의 메소드, 변수들에 접근할 수 있도록 해주는 API
Example class의 Type을 단순히 Object로 선언할 경우, getter 함수를 사용할 수 없으나, Reflection API 사용 시 가능
1. Class cls = Example.class;: Example 클래스의 Class 객체 생성
2. Method getExample = cls.getMethod("getExample");: cls 객체에서 "getExample"이라는 이름을 가진 메서드 호출
3. String title = (String) getExample.invoke(example, null);
3.1. getExample 메서드를 호출
3.2. invoke 메서드를 사용하여 메서드를 실행하고 결과를 반환
- example: Example 클래스의 인스턴스
- null: 메서드에 전달할 인자 없음
3.3. 반환된 결과를 String으로 캐스팅하여 result 변수에 할당
+📚 추가로 공부해볼 것: 기본 생성자 선언 시, protected, public만 가능한 이유
참고 자료
'Java > JPA' 카테고리의 다른 글
[SpringBoot_JPA_1] Cascade Type (0) | 2023.05.25 |
---|---|
[SpringBoot_JPA_1] FetchType.LAZY, EAGER (0) | 2023.05.25 |
[SpringBoot_JPA_1] @JoinTable (0) | 2023.05.23 |
[SpringBoot_JPA_1] @Enumerated (0) | 2023.05.23 |
[SpringBoot_JPA_1] @Inheritance @DiscriminatorColumn (0) | 2023.05.22 |