강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

ricepotato님의 프로필 이미지
ricepotato

작성한 질문수

제미니의 개발실무 - 커머스 백엔드 기본편

주문 - 코드 느끼기

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를 만드는 부분을 강조하고 싶었던 의도도 있습니다ㅎㅎ

 

이건 어디까지나 제 생각과 기준이다보니 참고만해보시면 좋을 것 같습니다!


모쪼록 답이 되었길 바랍니다! 감사합니다!

ricepotato님의 프로필 이미지
ricepotato
질문자

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

ricepotato님의 프로필 이미지
ricepotato

작성한 질문수

질문하기