코드 그라데이션

shop 구현 (9) 특이한 상속구조 본문

Spring/SpringShop

shop 구현 (9) 특이한 상속구조

완벽한 장면 2023. 7. 14. 12:33

ItemRepositoryCustom

 

이 부분인데

  //리포지토리 특이한 상속!!! -- 궁금...
  // 형제쪽에 드러나 있는 애가 있고 숨겨진 애가 있다.
  // 형제끼리는 원래 형변환이 되지 않는다. (Impl이라서 가능)
  @Transactional(readOnly = true)
  public Page<Item> getAdminItemPage(ItemSearchDto itemSearchDto, Pageable pageable) {
    return itemRepository.getAdminItemPage(itemSearchDto, pageable);
  } // 원래 itemRepository.getAdminItemPage는 죽어야 하는데, 다른 자식이 구현하고 있으므로 사용 가능.
   // 스프링이 해주는 특이한 형태.

  /*
  Spring 로딩 시 접미사가 impl인 것을 찾습니다.
  interface 구현 안 되어 있을 시 접미어가 impl과 결합되어서 형제인 다른 인터페이스를 통해서 impl에 구현되어있는 메서드가 호출된다.
   */

 

 

기본적으로 우리는 리포지토리를 JPA 리포지토리를 상속받아 사용한다.

그런데 그렇지 않고 내가 custom한 리포지토리를 만들고 싶을 때(또는 그래야만 할 때)가 생긴다.

기본적으로 인터페이스이니까 아무것도 구현이 안 되어 있는 게 맞는데, JPA 리포지토리는 기본적으로 구현되어 있는 메서드(구현체가 존재)가 몇 개 있음.

내가 직접 제공을 하겠다 할 때는 위처럼 Impl이라는 접미사를 붙여야 스프링이 찾아서 아 얘의 구현체가 이거구나 매칭을 시켜줌. 스프링에게 내가 직접 알려줘야 한다.

 

별도 구현 없이 impl만 뒤에 붙으면 구현체로 스프링이 인식한다. 일종의 컨벤션.

728x90
Comments