inflearn logo
강의

Course

Instructor

Real-World Java - Advanced Part 3, Lambda, Streams, and Functional Programming by Kim Young-han

Proper usage of default methods

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

51

zzwan

1 asked

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]
안녕하세요!
최근 프로젝트를 진행하며 코드 구조를 정리하는 과정에서 궁금한 점이 생겨 질문드립니다.

현재 상황

PostStrategy 인터페이스를 만들고 3개의 구현체를 두어, 홈 피드에 게시글을 조회하는 전략을 분리했습니다.
인터페이스에는 homePosts() 관련 메서드가 여러 버전으로 존재합니다. (homePosts, homePostsV2, homePostsV3 등)

public interface PostStrategy {

    boolean isExecutable(UserContext userContext);
    boolean requiresAuthentication();

    PostSummaryResponse homePosts(int size, Long cursorPostId, String username);
    PostSummaryResponse homePostsV2(int size, Long cursorPostId, String username);
    PostSummaryResponse homePostsV3(int size, Long cursorPostId, UserContext userContext);
    ...
}

 

문제 상황

구현체 중 ForYouPostStrategy만 V2와 V3를 실제로 사용하고 있고, 나머지 구현체에서는 homePosts()만 호출하는 식으로 처리하고 있습니다. 처음엔 단순했는데 버전이 늘어나면서 인터페이스가 점점 커지고 불필요한 코드가 많이 생긴 상황입니다.

 

궁금한 점

PostStrategy 인터페이스에 default 메서드를 정의해 공통 로직을 담고, 특정 전략에서만 필요한 부분을 오버라이드하는 방식으로 해도 괜찮을지 궁금합니다.
또는 인터페이스가 아닌 다른 방식으로 리팩토링하는 것이 더 적절할지 궁금합니다.

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

Answer 1

0

communityai8509

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

zzwan님, 디폴트 메서드를 사용하여 인터페이스의 공통 로직을 처리하려는 시도는 좋은 생각입니다. 인터페이스에 default 메서드를 정의하면, 구현체에서 공통으로 사용하는 로직을 줄일 수 있고, 필요한 경우 특정 구현체에서만 오버라이드하여 사용하게 할 수 있습니다. 이렇게 하면 코드 중복을 줄이고 인터페이스가 필요 이상으로 커지는 것을 방지할 수 있습니다.

그러나, 인터페이스가 너무 커지고 복잡해질 경우, 디자인 패턴을 고려하는 것이 좋습니다. 예를 들어, 전략(Strategy) 패턴을 활용하면 변경이 용이한 구조로 만들어질 수 있습니다. 각 전략이 공통적인 부분을 상속받고, 구체적인 구현 부분만 오버라이드하여 사용하는 방식으로 변경하는 것을 고려해 보실 수도 있습니다.

결합도가 낮은 디자인을 유지하면서 프로젝트의 복잡성을 줄이는 방향으로 리팩토링을 진행하시면 좋을 것 같습니다.

다음의 자료가 도움이 될 수 있습니다:
Spring Boot Reference Documentation
Spring Data JDBC - Reference Documentation

프로젝트 성공적으로 진행하시기 바랍니다!

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

1

70

1

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

0

69

1

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

0

143

2

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

0

78

2

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

0

94

1

람다 궁금한 점

0

73

2

스트림과 for문 질문

0

42

1

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

0

64

1

IntelliJ 한글 깨지는 현상 문의

0

200

1

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

0

60

1

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

0

56

1

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

0

60

2

지연 평가

0

68

1

메서드 시그니처

0

100

3

고급편 우선순위

0

129

3

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

0

112

2

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

0

87

1

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

0

102

1

스트림 중복 에러 관련 질문

0

69

1

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

0

132

1

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

0

100

2

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

0

81

2

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

0

123

1

선생님께 질문드립니다!

0

96

1