강의

멘토링

로드맵

Inflearn brand logo image

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

나구리님의 프로필 이미지
나구리

작성한 질문수

김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍

정리

스프링 데이터 JPA 인터페이스에서의 default 메서드 사용

작성

·

61

0

영한님 강의를 들으면서 인터페이스의 default 메서드는 하위 호환성을 위해서만 사용하고 일반적인 애플리케이션 개발시에는 사용할 일이 없다고 생각했었습니다.

 

그러나 프로젝트를 하던 도중에 스프링 데이터 JPA를 사용하는 Interface에서 Service에서 매번 Optional을 꺼내기 번거로우니 default 메서드를 사용해서 .orElseThrow(() -> new 예외 발생) 처럼 메서드를 작성하고 이렇게 해도 된다고 이야기를 들었습니다.

 

저는 이런 예외 발생도 Service 계층에서 하는 것이 맞는것 같기도 하면서, 사실 매번 Optional을 꺼내는 것이 귀찮기도 했던것이 사실이라 이렇게 사용하는 것이 일반적으로 정상적인 패턴인지 궁금해서 질문 드렸습니다.

 

디폴트 메서드의 올바른 사용법에서 '공통으로 쓰기 쉬운 간단한 로직'에 이정도의 상황이 부합되는지 궁금합니다.

답변 2

1

안녕하세요. 나구리님, 공식 서포터즈 David입니다.

네, 말씀하신 방법과 같이 사용하셔도 무방합니다.

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다. 나구리님께서 질문하신 내용은 인터페이스의 default 메서드 사용에 관한 것으로, 스프링 데이터 JPA와 같이 인터페이스 기반의 설계에서 많이 고려되는 주제입니다.

인터페이스의 default 메서드는 Java 8부터 도입된 기능으로, 기존 인터페이스에 새로운 메서드를 추가할 때 하위 호환성을 깨지 않기 위해 도입되었습니다. 하지만 이는 단순히 하위 호환성을 보장하기 위해서만 사용되는 것은 아닙니다. default 메서드는 코드 재사용성과 가독성을 높이기 위해 잘 설계된 경우 유용하게 사용될 수 있습니다.

스프링 데이터 JPA에서 인터페이스에 default 메서드를 추가하여 Optional을 처리하는 로직을 묶어두는 것은 다음과 같은 장점이 있습니다:

  1. 반복적인 코드 감소: Service 계층에서 동일한 Optional 처리 로직이 반복적으로 사용된다면, 이를 인터페이스의 default 메서드로 정의하여 중복을 줄일 수 있습니다.

  2. 명확한 의도 표현: Optional을 사용하며 예외를 던지는 상황은 의도적으로 특정 조건을 만족하는 경우를 강조하는 것이므로, 이를 적절하게 표현할 수 있는 별도의 메서드로 분리하는 것이 의도를 더 명확하게 할 수 있습니다.

다만, 이러한 설계를 채택할 때 주의할 점도 있습니다:

  • 응집도 유지: 인터페이스의 목적과 관련된 로직만을 다루어야 하며, 도메인 로직이나 비즈니스 로직이 너무 깊게 개입되지 않도록 주의해야 합니다.
  • 확장에 유리한 설계: 기본 설계를 해치지 않으면서도 유연성을 잃지 않는 방향으로 설계되어야 합니다.

이와 관련하여 스프링 데이터 JPA에서의 default 메서드 사용의 예제나 논의가 진행된 기존 질문과 답변을 참조하시면 유익할 것입니다.

참고할만한 기존 질답 링크

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

나구리님의 프로필 이미지
나구리

작성한 질문수

질문하기