대머리개발자

리팩토링 - 객체 주입에 대한.. 본문

개발이야기

리팩토링 - 객체 주입에 대한..

대머리개발자 2025. 8. 14. 13:55

해도해도.. 끝이 없다.

 

애초에.. 처음부터 잘 만들었으면.. 할 일이 없겠지만서도...

 

아니.. 퍼펙트하게 만들었어도... 끊임없이 변하는 요구사항 때문에.. 차피.. 계속 뜯어 고쳐야 하고.

 

그나마 손이 덜 타게 만들어야 하는 방법으로 고민 하면 좋을것 같다..

 

고민의 시작은 점점 많이 지는 EndPoint에 대한 처리..

@Configuration
class ArmeriaConfig{

    @Autowired
    lateinit var eventEndPoint: EventEndPoint

    @Autowired
    lateinit var participantEndPoint: ParticipantEndPoint

    @Autowired
    lateinit var couponEndPoint: PolicyEndPoint

    @Autowired
    lateinit var codeEndPoint: CodeEndPoint
    ......

 

fun registerEndpoints(serverBuilder: ServerBuilder) {
    serverBuilder.annotatedService(eventEndPoint)
    serverBuilder.annotatedService(participantEndPoint)
    
    ...

 

다음 두가지 과정을 무조건 해야 한다. 

1. 객체 바인딩 하고 2. 해당 객체를 서비스로 등록

무조건 해야 하는 코드는 보일러 플레이트 코드가 되는거쥬

 

10개가 넘어가니... 보기도 흉흉하다.

@Configuration
class ArmeriaConfig(private val endPoints: List<EndpointComponent>){
    
    fun registerEndpoints(serverBuilder: ServerBuilder) {
        endPoints.forEach { ep ->
            serverBuilder.annotatedService(ep)
        }
    }

 

type 기반으로 모든 엔드 포인트를 한방에 주입 받는다. <= 오늘 리팩토링 햄심

 

그러기 위해서는 모든 endPoint가 공통의 인터페이스 만든다.

package com.config

interface EndpointComponent

..


@Service
@ProducesJson
class AIEndPoint @Autowired constructor(var aiService: AIService) : EndpointComponent{

 

딱. 끝

 

그럼 앞으로... endPoint는 그냥..... EndpointComponent만 상속받으면.. 시마이!!!