본문 바로가기
왜?

[왜] 스프링부트의 repository는 클래스가 아니라 인터페이스일까?

by KKambi 2020. 5. 11.

설명

Spring Data JPA는 구현체 클래스를 제공한다.

즉, 구현 객체를 동적으로 생성해서 주입하게 된다.

 

Entity 타입과 PK 타입을 repository 인터페이스에서 제공하기만 한다면, Spring Data JPA가 기본적인 CRUD 메소드를 만들어 준다.

 

메소드 이름을 파싱해서 적절한 쿼리를 만든다. 예컨대 'find', 'by', 'distinct'와 같은 키워드들을 말이다.

 

게다가 쿼리를 위한 DSL도 가지고 있다. (Querydsl)

  • QueryDsl은 Type-Safe한 쿼리를 위한 스프링에서 제공하는 Domain Specific Language
  • SQL같이 문자로 Type Check가 불가능하고, 실행하기 전까지 작동 여부를 확인 하기 어려운 부분을 보완하여 SQL을 Java로 Type-Safe하게 개발 할 수 있게 해주는 프레임워크
  • Repository 인터페이스에서 메서드명이 너무 길어지거나 메서드명으로 쿼리문을 만들기 까다로운 조건일 때 사용

 

즉, 규칙(Java Persistence API)에 맞게 사용하기만 한다면 구체적인 구현을 Spring Data JPA가 대신 해주는 것이다.

 

 

 

 

 

출처

www.quora.com/Why-is-a-repository-in-Spring-Boot-an-interface-and-not-a-class

www.engkimbs.tistory.com/828

 

댓글