인프런 커뮤니티 질문&답변
실제 비즈니스에서 createOrder() 오버로딩에 관한 질문
작성
·
194
0
- 학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요! 
- 먼저 유사한 질문이 있었는지 검색해 보세요. 
- 서로 예의를 지키며 존중하는 문화를 만들어가요. 
안녕하세요! 강의를 듣는 중에 createOrder() 메소드에 관한 궁금한 점이 생겨 질문드립니다.
좋은 예시와 설명으로 테스트를 어렵게 코드들을 외부로 빼서 테스트를 쉽게할 수 있게 하는 점을 잘 이해했습니다.
그런데 강의에서 파라미터 주입으로 변경한 createOrder(LocalDateTime ) 메소드는 사실상 다른 비즈니스 클래스에서 사용한다고 했을 때 모두 LocalDateTime.now()을 파라미터로 사용할 것으로 생각됩니다.
그래서 저렇게 파라미터로 뺀 경우 createOrder() 메소드를 사용하는 다른 비즈니스 클래스에선 불필요한 코드 반복이 발생할 수 있을 것 같고 또 개발자가 LocalDateTime.now() 대신 잘못된 값을 넣을 수 있게 되니 잠재적으로 예기치 못한 동작을 유도할 수도 있을 것 같다는 생각이 드는데 이런 부분들은 어떻게 생각하시는지 궁금합니다..!
답변 2
2
안녕하세요, 홍혁준 님!
만약 외부에서 사용하는 곳이 많고, 매번 now()를 넣어주는 것이 번거롭게 느껴진다면, 저는 메서드 오버로딩을 활용할 것 같아요.
public Order createOrder() {
    return createOrder(LocalDateTime.now());
}
public void createOrder(LocalDateTime requestedDateTime) {
    ...
}사용하는 쪽의 편의를 위해 두 개의 메서드를 모두 public으로 열어놓는 대신, 외부에서 시간 데이터가 주어지지 않으면 기본값을 사용하도록 하는 방법입니다.
이러면 핵심 로직에 대한 테스트도 가능하면서, 사용하는 쪽은 보다 덜 번거롭게 사용할 수 있습니다.
도움이 되셨기를 바랍니다.
감사합니다 🙂 
0
안녕하세요, 인프런 AI 인턴입니다.
홍혁준님, 질문하신 createOrder() 메소드에 LocalDateTime 파라미터를 추가하는 것에 대한 고민과 특정 상황에서의 코드 반복 및 잠재적 오류 가능성에 대한 우려에 대해 유사한 상황에서 지식공유자님의 기존 답변을 참고할 수 있는 링크를 찾았습니다.
- 테스트를 위하여, OrderService의 createOrder의 파라미터로 registerDateTime을 추가한 측면 - 이 질문에서는 테스트를 위해 OrderService의createOrder메소드에registerDateTime파라미터를 추가하는 것에 대한 고민이 구체적으로 표현되어 있습니다. 지식공유자께서는 테스트하기 어렵게 만드는 요인들을 분리하여 테스트 가능한 구조를 만드는 것이 유익하다는 설명과 더불어 다른 대안에 대해서도 논의하였습니다.
 
 
- 이 질문에서는 테스트를 위해 
- 
- 이 질문에서는 비슷하게 LocalDateTime파라미터를 추가하면서 발생할 수 있는 문제와 함께 그에 대한 해결책을 설명하고 있습니다.
 
 
- 이 질문에서는 비슷하게 
홍혁준님이 우려하시는 코드 반복과 잘못된 값에 대한 입력 문제에 대해서는, 특정 상황에서는 LocalDateTime.now()를 직접 사용하지 않고, 이를 주입하는 방식으로 유연함을 확보할 수 있다는 점이 있습니다. 하지만 이 방식은 프로덕션 코드에서도 일관성을 유지하면서 테스트하기 쉬운 형태를 만들어 낸다는 것에 큰 장점이 있습니다.
결론적으로, 이러한 접근 방법은 테스트 용이성을 높이지만, 항상 그에 따른 트레이드오프가 존재합니다. 코드 반복을 줄이기 위해서는 LocalDateTime을 주입하는 대신 서비스에서 값을 생성하도록 하거나, 잘못된 값 입력을 방지하기 위해 더욱 명확한 문서화와 코드 리뷰를 통해 관리할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.






