inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

정리

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

해결된 질문

112

개발자 취업 포기

작성한 질문수 10

0

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

 

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

 

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

 

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

java 함수형-프로그래밍 lambda optional

답변 2

1

David

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

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

감사합니다.

0

인프런 AI 인턴

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

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

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

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

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

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

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

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

참고할만한 기존 질답 링크

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

db sql vs java stream 비교 궁금증 알려주세요!

1

70

1

파라미터 구분이 안되는지..?

0

68

1

자바 21 버전을 꼭 써야하나요??

0

143

2

9. 스트림 API3-컬렉터 오타?

0

78

2

(추석 챌린지) 복습 정리내용

0

94

1

람다 궁금한 점

0

73

2

스트림과 for문 질문

0

41

1

디폴트 메서드를 사용한 리펙토링

0

51

1

실무에서의 커스텀 Collector 사례 여부

0

63

1

IntelliJ 한글 깨지는 현상 문의

0

199

1

함수형 프로그래밍 적용 범위/원칙

0

59

1

스트림에 대해서 질문(float)은 사용하는지

0

55

1

[자료 패키지 누락] 2.람다 자료에서 문제 패키지명 생략 (25page)

0

60

2

지연 평가

0

68

1

메서드 시그니처

0

100

3

고급편 우선순위

0

129

3

독립적인 스레드 할당 시 스레드 개수는 어떻게 할당해야 할까요?

0

87

1

병렬 프레임 병목 현상 해결책에 대해 궁금한 점

0

102

1

스트림 중복 에러 관련 질문

0

69

1

자바 버전이 31 까지 업데이트 된다면 새로운 자바 강의를 추가 하실 건가요?

0

132

1

임계값과 스레드수를 줄일 경우 교착상태가 발생할수 있는건가요?

0

100

2

변수 합치기에 대해서 질문드립니다!

0

80

2

flatMap 응용 방법에 대해서, 이렇게 하는게 맞는지?

0

122

1

선생님께 질문드립니다!

0

96

1