도메인 로직, 비즈니스 로직을 어디에 둘 지를 결정하는 패턴
PaymetService.prepare
)
Payment
)
Payment
처럼 값만 가지는 것이 아닌 기능을 수행하는 코드가 들어가야 됨Payment
에 이동하는 방법
FactoryMehthod
를 이용하면 그 안에 의미있는 처리를 하는 코드도 넣을 수 있으며, 이름을 부여할 수 있음static
으로 작성 : 아직 오브젝트를 생성하지 않은 채로도 실행 가능해야 되기 때문foreginCurrencyAmount
는 결국 paymet
안에 들어가는 정보이므로
외부에서 payment
안에 들어갈 정보를 가지고 계산을해서 결과 값을 넣어주는 것보다
payment
자기가 가지고 있는 정보로 뭔가 게산하거나 수행하는 건 payment
안에 기능이 들어가있는게 좋음기존의 내부 로직이 4줄에서 2줄로 줄어들었음
테스트 모두 성공하는 것을 확인할 수 있음
이렇게 코드 구조를 완전히 개선 하더라도 기능에 문제가 없다는 것 ⇒ 리팩토링
리팩토링을 하려면 반드시 테스트 코드를 만들어 줘야 됨
PaymentService
를 통한 테스트를 만드는 것도 가능하지만 Payment
클래스에 대한 테스트도 바로 만들 수 있음
payment
는 정보를 의존하는 것이 아닌 payment
를 준비하는 동안 필요로 하는 작업만 수행하는 것이기 때문에 테스트가 간단함