목록BE (354)
오봉이와 함께하는 개발 블로그
전략 패턴 - 예제 2전략 패턴도 익명 내부 클래스를 사용할 수 있다. @Test void strategyV2() { Strategy strategy1 = new Strategy() { @Override public void call() { log.info("logic 1 execute"); } }; log.info("strategyLogic1={}", strategy1.getClass()); ContextV1 context1 = new ContextV1(strategy1); context1.execute(); Strategy strategy2 = new Strategy() { @Override public vo..
전략 패턴 - 시작ContextV1Test@Slf4jpublic class ContextV1Test { @Test void strategy() { logic1(); logic2(); } private void logic1() { long startTime = System.currentTimeMillis(); //비즈니스 로직 실행 log.info("비즈니스 로직1 실행"); //비즈니스 로직 종료 long endTime = System.currentTimeMillis(); long resultTime = endTime - startTime; log.info("resultTime={}", resultTime); } private void logic2()..
템플릿 메서드 패턴 - 적용 1AbstractTemplate.javapublic abstract class AbstractTemplate { private final LogTrace trace; public AbstractTemplate(LogTrace trace) { this.trace = trace; } public T execute(String message) { TraceStatus status = null; try { status = trace.begin(message); T result = call(); trace.end(status); return result; } catch (Exception e) { trace.ex..
템플릿 메서드 패턴 - 시작로그 추적기 도입 전 V0 코드 @GetMapping("/v0/request") public String request(@RequestParam("itemId") String itemId) { orderService.orderItem(itemId); return "ok"; } public void orderItem(String itemId) { orderRepository.save(itemId); }로그 추적기 도입 후 V3 코드 @GetMapping("/v3/request") public String request(@RequestParam("itemId") String itemId) { TraceStatus statu..
FIRST 원칙 Fast: 테스트는 빠르게 동작하여 자주 돌릴 수 있어야한다.(단위 테스트로 작성) Independent: 테스트는 독립적이며 서로 의존해서는 안 된다. Repetable: 반복하여 테스트가 가능해야한다. Self-Validating: 테스트는 성공 또는 실패로 bool값으로 결과를 내어 자체적으로 검증되어야한다. 예를 들어 로그나 System.out.println() 같이 콘솔에 찍히는 값을 비교하는 테스트는 지양 Timely: 테스트는 적시에 즉, 테스트하려는 실제 코드를 구현하기 직전에 구현해야 한다. Test double 특정 Service 계층에서 외부 시스템에 의존하는 것들이 많아지면 테스트 코드 작성이 매우 어려워진다. 예: DB, 테스트 대상이 아닌 API 서버 등 특정 S..