final
클래스,final
필드를 포함하는 클래스는 JPA의 엔티티가 될 수 없다.
이는 JPA가 내부적으로 지연 로딩(Lazy Loading)을 사용하기 때문이다.
✏️ 지연 로딩(Lazy Loading)은 연관된 엔티티를 실제로 사용하는 시점에 조회한다.
✏️ 지연 로딩을 사용하려면 데이터베이스 조회를 지연시킬 수 있는 가짜 객체가 필요하다.
지금까지의 내용을 정리해 보자.
JPA는 지연 로딩을 사용하고, 지연 로딩은 내부적으로 프록시를 사용한다.
프록시 객체는 실제 객체를 상속하여 만들어진다.
final
키워드는 어떤 곳에 사용되느냐에 따라 그 의미가 달라진다.final
이 붙은 클래스는 상속될 수 없다.final
이 붙으면 안 된다.final
필드가 포함된 클래스 역시 JPA 엔티티가 될 수 없다.리플렉션(Reflection)
JVM은 클래스 정보를 클래스 로더를 통해 읽어와서 JVM 메모리에 저장한다.
그렇게 저장된 클래스 정보는 마치 “거울에 투영된 모습”과 닮아 있어 리플렉션이라 부른다.
이 리플렉션을 사용하면 생성자, 메서드, 필드 등의 클래스 정보를 자세히 알아낼 수 있다.
setter
를 사용해야 한다.final
필드는 setter
를 통해 초기화 및 수정을 할 수 없다.final
이 붙으면 안 된다.