강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của ricepotato
ricepotato

câu hỏi đã được viết

Thực hành phát triển với Gemini - Phần cơ bản về Backend thương mại điện tử

Đơn hàng - Cảm nhận mã nguồn

OrderKeyGenerator 인스턴스화 generate() 질문

Đã giải quyết

Viết

·

74

·

Đã chỉnh sửa

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(),
        )
    }
}
kotlinspring-boot도메인dbms/rdbmsbackend

Câu trả lời 1

1

geminikims님의 프로필 이미지
geminikims
Người chia sẻ kiến thức

안녕하세요 질문 감사드립니다!
절대 사소하지 않고 아주 중요한 부분입니다! 좋은 질문 감사드려요!

저는 일반적으로 대부분 static으로 구성하지 않는편 이긴합니다
이는 기본적으로 테스트 구성 시 mocking이 불편하기 때문인데요 (mocking이 안 되는 것은 아님)

그 외에 기준은 개념적인 중요도의도를 나타내는 것을 중요하게 생각합니다

그런 측면에서 OrderKey는 단순하게 Key를 생성하는 역할을 하고 있지만 이것의 의미가 중요한 부분이라 생각하고, 이 컴포넌트가 있다는 것의 의도를 나타내고 싶었기 때문에 빈으로 구성했다라고 봐주시면 좋을 것 같습니다

사실 우리가 코드를 볼때 클래스의 책임과 연관성을 보여주는 많은 정보들이 있는데
저는 가장 쉽게 많이 먼저 보는 것이 생성자 부분이라고 생각합니다

그런 측면에서 OrderKeyGenerator 를 빈으로 구성해서 굳이굳이 주입을 받으려 한 것은
Order를 생성하는 플로우에서 OrderKey를 만드는 부분을 강조하고 싶었던 의도도 있습니다ㅎㅎ

 

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


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

ricepotato님의 프로필 이미지
ricepotato
Người đặt câu hỏi

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

Hình ảnh hồ sơ của ricepotato
ricepotato

câu hỏi đã được viết

Đặt câu hỏi