본문 바로가기
주간 개발 일지

2월 1주차

by 델버 2025. 2. 10.

공부하고 본 것

토비의 스프링6 의존 관계

- 링크

강의 중간에 도메인 객체를 설계하는데 이런 식이다.

public Payment prepare(Long orderId, String currency, BigDecimal foreignCurrencyAmount) throws IOException {
    BigDecimal exRate = exRateProvider.getExRate(currency);

    return Payment.createPrepared(orderId, currency, foreignCurrencyAmount, exRate, LocalDateTime.now(clock));
}

기존 exRateProvider(환율 정보를 가져오는 도메인 서비스다. interface)를 계산하는 것을 Payment 도메인 오브젝트에 역할을 넘겨주는 것도 가능하다는 것이다.

public Payment prepare(Long orderId, String currency, BigDecimal foreignCurrencyAmount) throws IOException {
    return Payment.createPrepared(orderId, currency, foreignCurrencyAmount, exRateProvider, clock);
}

그럼 비즈니스 로직이 Payment로 가게된다.

질문 요지는 ExRateProvider를 Payment가 의존하는 게 맞는 것인지에 대한 질문이다. Payment는 순수하게 Payment에 대한 것을 가지고 있어야 한다는 것이다. 나도 동일한 생각이었고 사실 저때 넘겨주는 것은 저것까지 넘기는 게 과연 괜찮을까?였다.

사실 내 생각은 Payment는 환율에 대한 값을 쓰는 것이지 누가 그 값을 제공하는지(ExRateProvider라는 존재가 넘겨주는 걸) 알 필요가 없다고 생각했다.

 

하지만 토비님 답변은, 의도 자체는 도메인 오브젝트에 '어떤 기능을 담당하는 오브젝트를 주입하는 것도 가능하'다는 것도 보여주신 거라고 하셨다. 답변을 보고 Payment(도메인 오브젝트)가 직접 도메인 서비스를 주입받아 사용하는 것도 가능하다고 해석했다. 어쨌든 이 비즈니스 자체의 역할 범위를 Payment에게 적용했다는 것이된다. 값을 제공하는 존재를 사용하는 것도 Payment가 하는 역할로 상정했다고 이해했다. 그리고 애초에 ExRateProvider는 도메인 오브젝트 서비스라는 것.

 

마지막에 '코드의 의존관계는 코드 레벨에서 먼저 생각해야 합니다.'라고 하신다. 코드를 변경할 때에 방해받는지에 대해 생각해보자는 것으로 느꼈다. 만약 방해받는다면 느슨하게 해주면 된다는 것.

 

그러고 다시 해당 강의를 보았는데 무심결에 넘어갔지만 토비님은 그 강의도 그랬고 이전 강의도 그랬고, 계속하여 코드가 변경될 때 의존 관계가 방해되면 이렇게 해결한다는 것을 보여주고 계셨다.

 

- 강의 링크


아래는 나머지 읽고 있는 것들

- 자바에서 난수를 만드는 방법과 주의할 점

- BigDecimal A to Z: 정확한 계산을 위한 숫자 처리 클래스

'주간 개발 일지' 카테고리의 다른 글

11월 1주차  (0) 2024.11.03
10월 3주차  (3) 2024.10.21
2023년 회고  (1) 2024.01.08
5,6,7월  (0) 2023.07.09
4월  (0) 2023.04.29

댓글