문제
- @Repository vs JpaRepository
- Bean으로 등록해주는 Annotation 중에 @Controller, @Service, @Repository 등등 컨트롤러인지 서비스인지 명시해주고 등록해주는 것들이 있다고 알고 있었다.
- 헌데 Respository를 만드는데에 있어서 extends JpaRepository를 해주고 클래스가 아닌 인터페이스로 만들어둔 부분에 있어서는 @Repository라는 별도의 어노테이션을 붙이지 않았다.
- 왜 붙이지 않는지, JpaRepository라는 곳에 이미 붙여있는지 궁금해서 찾아보고자 한다.
시도
- @Repository vs JpaRepository
- Spring Data JPA는 스프링에서 JPA를 편리하게 사용할 수 있도록 지원하는 모듈이다.
- 실제로 이렇게 사용을 한다면 구현체도 만들어서 주기 때문에 사용하기 편리하다.
- extends JpaRepository를 하면 해당 인터페이스의 구현체인 SimpleJpaRepository에서 @Repository로 스프링 컨테이너가 관리하는 빈이 된다.
-> 그래서 @Repository를 별도로 선언하지 않아도 되었던 것으로 보임
해결
- JpaRepository를 상속 받으면 SimpleJpaRepository에서 @Repository로 스프링 컨테이너가 관리하는 빈이 된다. 따라서 굳이 @Repository를 붙여주지 않아도 가능하다.
-> 더 자세하고 세세한 부분과 과정은 따로 공부를 더 해보아야겠다. 오늘은 프로젝트 끝나는 날이라 힘이 딸린다...
오늘 푼 문제
- 백준 13305 (주유소) - Java
- 그냥 간단하게 현재 기름 값이 기존의 기름 값보다 비싼지만 확인하면 되는 문제
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int city = Integer.parseInt(br.readLine());
Long[] road = new Long[city - 1];
Long[] oil = new Long[city];
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < city - 1; i++) {
road[i] = Long.parseLong(st.nextToken());
}
st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < city; i++) {
oil[i] = Long.parseLong(st.nextToken());
}
Long minCost = oil[0];
int sum = 0;
for (int i = 0; i < city - 1; i++) {
if (oil[i] < minCost) minCost = oil[i];
sum += minCost * road[i];
}
bw.write(sum + "\n");
bw.flush();
bw.close();
br.close();
}
}