강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

Aurora님의 프로필 이미지
Aurora

작성한 질문수

Spring Boot, AWS로 백엔드 서비스 한 사이클 완성하기

인메모리 저장소 H2 Database 연결하기

JPA Repository 질문이 있습니다!

해결된 질문

작성

·

27

1

안녕하세요!

기존 PostRepository를 사용하다가 JPA 도입으로 JpaPostRepository가 새로 생겼는데, JpaPostRepository 클래스에 재구현을 하기 위해 default 메서드를 추가했는데 그 방법이 아닌 PostRepositoryImpl 와 같은 구현체를 만들어서 구현해도 무방할까요? 실무에서는 어떤 방식이 더 자주 사용 되는지 궁금합니다.

퀴즈

58%나 틀려요. 한번 도전해보세요!

데이터 저장 방식인 메모리와 디스크의 가장 큰 차이점은 무엇일까요?

접근 속도

데이터 지속성 (영구성)

저장 용량 제한

구현 복잡성

답변 2

1

한조각님의 프로필 이미지
한조각
지식공유자

안녕하세요 Aurora 님

JpaPostRepositoryfindAllPaged 메소드만 재정의한 이유는, PostRepository 에 있는 save, findAll, findById, deleteById 는 JpaRepository 의 기본 구현체가 이 메소드를 지원하는 반면, findAllPaged 는 그렇지 않기 때문에 재정의했습니다.

즉, PostRepository 라는 인터페이스를 그대로 사용하고 싶은데, JpaRepository 의 기능 추가하여 사용하고 싶어서 JpaPostRepository 라는 중간 인터페이스를 사용한 형태입니다.

PostRepositoryImpl 같은 구현체를 직접 만들어서 사용하셔도 됩니다. 다만 강의의도는 위에서 말씀드린 것처럼 Spring Data Jpa 가 지원하는 JpaRepository 인터페이스를 사용하기 위함이 크다고 생각해주시면 됩니다.

감사합니다.

 

0

안녕하세요, 인프런 AI 인턴입니다.

Aurora님께서 JPA와 관련된 궁금증을 가지고 계시네요. JPA를 도입하면서 Repository를 구현하는 방법은 여러 가지가 있습니다. 질문하신 대로 두 가지 접근 방법에 대해 설명드릴게요.

  1. Default 메서드를 사용한 JpaPostRepository: JpaPostRepository 인터페이스에 default 메서드를 정의하여 인터페이스 자체에서 기본 구현을 제공할 수 있습니다. 이 방법은 인터페이스의 기능 확장이 비교적 간단하게 이루어질 수 있고, 인터페이스의 일관성을 유지할 수 있다는 장점이 있습니다.

  2. PostRepositoryImpl과 같은 구현체를 사용하는 방법: 기존의 Repository 인터페이스를 확장하거나 직접 구현체 클래스를 작성하여 필요한 메서드를 추가하는 방식입니다. 이 방법은 복잡한 비즈니스 로직이나 여러 인터페이스를 구현해야 할 때 유리합니다. 실무에서는 커스터마이징이 많거나 복잡한 쿼리 로직이 필요한 경우 구현체 클래스를 사용하여 클래스를 명확하게 분리하고 관리하는 경우가 많습니다.

실무에서는 프로젝트의 요구사항과 팀의 스타일에 따라 달라질 수 있지만, 복잡한 로직을 가지고 있거나 여러 개발자가 함께 작업할 때는 구체적인 구현체 클래스를 작성하는 것이 더 선호됩니다. 이는 유지보수성과 코드의 명료성을 높이기 때문입니다.

위 내용을 바탕으로 만약 관련된 추가 설명이나 예시가 필요하신 경우 기존 게시글을 참고하시면 큰 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Aurora님의 프로필 이미지
Aurora

작성한 질문수

질문하기