본문 바로가기

TIL

[TIL 2022-2-10]JPA 기본, 피보나치

EntityManagerFactory

EntityManagerFactory는 이름 그대로 EntityManger를 생산하는 공장과 같은 역할을 한다. Thread-safety 하기 때문에 하나만 생성해서 애플리케이션 전체에서 공유하는 방식으로 사용한다.

 

EntityManager

EntityManager 또한 이름그대로 엔티티를 관리하는 객체이다. EntityManagerFactory와는 다르게 쓰레드 공유에 안전하지 않기 때문에 트랜잭션마다 새로운 EntityManger를 사용해 처리한다. 아래 코드를 보면 EntityManagerFactory를 통해 EntityManager를 생성하고 EntityManager를 통해 트랜잭션과 영속성 컨텍스트를 관리하는 역할을 하는 것을 볼 수 있다.

JPA는 엔티티매니저와 트랜잭션을 통해 데이터를 영속성 컨텍스트에 추가하고 디비에 반영한다.

스프링에서는 EntityManger를 필드에서 정의하고 @persistencecontext를 통해 컨테이너에서 프록시를 통해 주입된다(DI). 프록시는 엔티티매니저가 호출될때마다 새로운 객체를 생성하므로 Thread-Safety를 보장한다.

 

 

 

재귀보다 훨씬 빠른 피보나치 수를 구하는 방법

재귀함수를 통해 피보나치수를 구하는 방식은 O(n^2)의 시간 복잡도를 갖기 때문에 수가 커질수록 속도가 기하급수적으로 늦어짐

 

- 동적 계획법을 통해 O(n) 으로 해결 

private int fibonacci(int number){
    int[] fibs = new int[number + 1];
    fibs[1] = 1;
    for(int i = 2;i <= number;i++){
        fibs[i] = fibs[i - 1] + fibs[i - 2];
    }
    return fibs[number];
}

행렬, 일반항의 방법도 있고 이를 사용하면 logn 까지 줄일 수 있지만 일반적인 코테에서 생각해 낼 수있는 부분이 아니라서 생략

 

 

 

참고 :

https://www.inflearn.com/course/ORM-JPA-Basic/dashboard

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의

JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., - 강의 소개 | 인프런

www.inflearn.com

 

https://shoark7.github.io/programming/algorithm/%ED%94%BC%EB%B3%B4%EB%82%98%EC%B9%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EC%9D%84-%ED%95%B4%EA%B2%B0%ED%95%98%EB%8A%94-5%EA%B0%80%EC%A7%80-%EB%B0%A9%EB%B2%95.html

 

피보나치 수열 알고리즘을 해결하는 5가지 방법

Let me introduce 5 different ways to solve fibonacci algorithm

shoark7.github.io