인프런 커뮤니티 질문&답변
OrderKeyGenerator 인스턴스화 generate() 질문
해결된 질문
작성
·
35
·
수정됨
1
안녕하세요! 수업 잘 듣고 있습니다.
사소한 내용이긴한데..
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를 만드는 부분을 강조하고 싶었던 의도도 있습니다ㅎㅎ
이건 어디까지나 제 생각과 기준이다보니 참고만해보시면 좋을 것 같습니다!
모쪼록 답이 되었길 바랍니다! 감사합니다!





이해했습니다. 감사합니다!