OrderKeyGenerator 인스턴스화 generate() 질문
안녕하세요! 수업 잘 듣고 있습니다.
사소한 내용이긴한데..
OrderService.create 에서 OrderKeyGenerator 객체를 를 주입받아 generate() 를 호출해서 orderKey 를 생성하는 부분에서
OrderKeyGenerator class 는 상태를 가지지도 않고 Property 를 가지지도 않는데 static method, 함수로 구현 되어도 되지 않았을까 하는 생각이 들었는데요.
어떤 고려사항이 있는지 궁금합니다.
static 이든 함수든 객체 메서드이든 상관 없다?
나중에 OrderKeyGenerator 가 확장되는 것이 고려된 것?
OrderSerivce 에서 사용하는 기능이니 주입되는 것이 더 응집되어 보여서 더 좋다?
그냥 함수를 가져다 쓰는 것보다 객체를 주입하는 쪽이 테스트 하기 좋다?
generate 가 순수함수가 아니라서?
class OrderKeyGenerator {
fun generate(): String {
return Base64.getUrlEncoder().withoutPadding().encodeToString(
ByteBuffer.allocate(16).apply {
UUID.randomUUID().also {
putLong(it.mostSignificantBits)
putLong(it.leastSignificantBits)
}
}.array(),
)
}
}
답변 1
1
안녕하세요 질문 감사드립니다!
절대 사소하지 않고 아주 중요한 부분입니다! 좋은 질문 감사드려요!
저는 일반적으로 대부분 static으로 구성하지 않는편 이긴합니다
이는 기본적으로 테스트 구성 시 mocking이 불편하기 때문인데요 (mocking이 안 되는 것은 아님)
그 외에 기준은 개념적인 중요도와 의도를 나타내는 것을 중요하게 생각합니다
그런 측면에서 OrderKey는 단순하게 Key를 생성하는 역할을 하고 있지만 이것의 의미가 중요한 부분이라 생각하고, 이 컴포넌트가 있다는 것의 의도를 나타내고 싶었기 때문에 빈으로 구성했다라고 봐주시면 좋을 것 같습니다
사실 우리가 코드를 볼때 클래스의 책임과 연관성을 보여주는 많은 정보들이 있는데
저는 가장 쉽게 많이 먼저 보는 것이 생성자 부분이라고 생각합니다
그런 측면에서 OrderKeyGenerator 를 빈으로 구성해서 굳이굳이 주입을 받으려 한 것은
Order를 생성하는 플로우에서 OrderKey를 만드는 부분을 강조하고 싶었던 의도도 있습니다ㅎㅎ
이건 어디까지나 제 생각과 기준이다보니 참고만해보시면 좋을 것 같습니다!
모쪼록 답이 되었길 바랍니다! 감사합니다!
다양한 관점의 코드 경험을 위해 개선하지 않은 코드
1
44
1
histories() 응답에 PointHistory.id를 포함한 이유가 궁금합니다/
1
39
2
SettlementTargetRepository Jquery 질문
1
42
2
부가 기능을 이벤트 핸들러로 분리하는 기준이 있을까요?
1
56
2
엔티티의 pk 를 0으로 초기화하시는 이유가 있을까요??
1
64
2
제미니님 안녕하세요!
1
71
2
개념 간 격벽 분리와 목록 조회 시 발생하는 참조 구조
1
77
2
프로덕트와 프로덕트카테고리 사이의 삭제 정책
1
72
2
새로 개발한다면 구현 순서
1
128
1
의존 방향에 대한 고민
1
119
2
어드민(Back-office)에서 예약 변경 시, '할인 조건 재검증(쿠폰 회수)' vs '기존 혜택 유지' 중 어떤 정책이 일반적인가요?
1
93
2
외부 API 통합 시 데이터 제어 범위 설계 질문
1
91
1
PG 결제 승인 로직
1
123
2
QnA에서 Join 필드 표현법
1
85
1
결제서비스 콜백 동시성문제 가능성
1
99
2
굿
1
104
1
도메인/엔티티 분리 상황에서 쓰기 작업 하는 방법
1
134
2
도메인 객체와 엔티티 객체 사용
1
132
2
CouponService 의존성 의문
1
92
2
상품 목록 조회 고도화 질문
1
107
2
표현 계층에서의 접근 지점이 다양해지는것과 이를 해결하기 위한 파사드의 도입에 대해 제미니님의 생각이 궁금합니다.
1
120
2
제품상세 코드 느끼기
1
138
2
격벽의 순환 참조(?)
1
109
2
결제 관련 서킷 브레이커 전략, 데이터 정합성 및 타임아웃 설정 질문
2
173
2





