반응형
들어가며
우테코 프리코스 4주차에서 예외 발생시 재시도 로직을 RetryHandler를 만들어서 구현했다.
public <T> T retryUntilNotException(final Supplier<T> logic, final OutputView outputView) {
while (true) {
try {
return logic.get();
} catch (IllegalArgumentException e) {
outputView.printErrorMessage(e);
}
}
}
하지만, 이 메서드는 outputView를 받아와서 이를 참조하도록 구현했기 때문에 outputView의 변경사항이 전파된다는 문제점이 있었다.
- 결합도 상승
그래서 최종 코테를 대비하면서 문제를 풀어보다 해결했다
본론
결과부터 말하면, 메서드 참조를 활용해서 콜백 메서드를 넘겨주는 것으로 구현했다.
public <T> T retryUntilNotException(final Supplier<T> logic, final Consumer<CustomException> exceptionCallback) {
while (true) {
try {
return logic.get();
} catch (CustomException e) {
exceptionCallback.accept(e);
}
}
}
Consumer<CustomException>
을 매개변수로 던져주면서 해당 메서드만 호출하면 outputView를 참조하지 않고도 출력을 할 수 있었따!
사용 예시는 아래와 같다.
String moving = retryHandler.retryUntilNotException(inputView::readMoving, outputView::printErrorMessage);
- 첫 번째 매개변수에 입력 받을 메서드를 참조해서 넣어주고, outputView의 printException을 메서드 참조로 넣어주면 된다.
결론
새롭게 리팩토링해서 handler의 outputView 참조를 없앨 수 있었다.
- 결합도 감소!
반응형
'JAVA' 카테고리의 다른 글
[JAVA] 생산자 소비자 문제와 자바의 Object.wait() notify() (2) | 2024.10.02 |
---|---|
[JAVA] ReentrantLock이 뭔가요? (0) | 2024.09.24 |
[JAVA] java.util.concurrent.LockSupport 알아보자 (0) | 2024.09.24 |
[JAVA] 자바의 임계 영역과 동기화, synchronized (0) | 2024.09.23 |
[JAVA] 자바의 volatile 키워드와 메모리 가시성 (1) | 2024.09.23 |