Weekly I Learned (5월 1주차)

YEON·2022년 4월 30일
0

Weekly I Learned (2022)

목록 보기
3/15
그 주의 화요일, 금요일을 지정 날짜로 업데이트 합니다

1. JPA findAll & findById update 차이

findAll 을 하면 해당 테이블에 있는 (update 되어있을지도 모르는) 모든 정보를 가져와야해서 update 문이 발생한 후, 최신의 모든 정보들을 가져온다.
findById 의 경우 한 건의 데이터에 해당되고, 현재 트랜잭션 안에서 변경중인 데이터라면 영속성 컨텍스트에서 관리중이어서 테이블까지 넘어가지 않고 캐싱하고 있던 객체를 찾아주기 때문에 update와 select 모두 발생하지 않는다. (트랜잭션이 끝난 이후에 update 문이 발생한다.)

학습 테스트 진행



2. Java Reflection API

Reflection API란?
자바에서는 JVM이 실행되면 작성된 자바 코드가 static 영역에 저장된다.

Reflection API는 이 정보를 활용하여 구체적인 클래스 타입을 알지 못해도 클래스 이름을 통해 static 영역에서 그 클래스의 정보(메서드, 타입, 변수 등등)에 접근할 수 있게 해준다. (다만 생성자의 인자 정보는 알 수 없다.)

Reflect 단어의 사전적 의미가 투영,반사인 것처럼 Reflection 이란 객체를 통해 클래스의 정보를 분석할 수 있다.

만약, Reflection API 를 사용할 수 없다면
자바는 컴파일러를 사용하기 때문에 (컴파일 타임에 타입이 결정 ) Object 으로 타입을 설정했을 시 (구체적인 클래스 타입인 Student 를 지정해주지 않아) Student 클래스의 다른 메서드들은 사용할 수 없다. (ex. student.setName(""))

public static void main(String[] args) {
    Object student = new Student("kim");
    //ex. student.setName("") 불가능
}

결국, 컴파일러를 사용하는 자바는 구체적인 클래스를 모르면 해당 클래스의 정보에 접근할 수 없지만 이것을 가능하게 해주는 것이 Reflection API이다. (다만, Reflection은 컴파일 타임이 아닌 런타임에 타입을 분석하고 정보를 가져오므로 성능 오버헤드 문제가 있을 수 있다.)

때문에 Reflection은 프레임워크나 라이브러리에서 많이 사용된다. (ex. Hibernate, Spring Framework, Spring Data JPA 등)



+ 재학습 update






[참조]
https://www.inflearn.com/questions/6187
https://tecoble.techcourse.co.kr/post/2020-07-16-reflection-api/
https://velog.io/@lsj8367/findAll-findById%EC%9D%98-%EC%B0%A8%EC%9D%B4

profile
- 👩🏻‍💻

0개의 댓글