empty object에서 invoke 메소드

0

Kotlin

목록 보기
32/32
post-custom-banner

  • 현재 프로젝트에서는 아무것도 응답할 게 없는 경우에 EmptyResponse를 사용한다.
    (Unit 을 응답하는게 가장 좋지만, 프론트의 요청사항으로 json 형식으로 응답하기 위함)
    Service에서 return EmptyResponse 이렇게 응답하는데 여기서 문제가 발생한 것 같다.

    • EmptyResponse는 Singleton으로 만들기 위해서 object로 선언하고, 안에 필요한 메소드나 변수가 없기 때문에 object EmptyResponse 로 둔 상황.
  • 근데 intellij에서 gradle build할때는 문제가 없었는데, github에서 pr하려고 build를 돌릴때 실패한다.

file:///home/....... Expression 'EmptyResponse' of type 'EmptyResponse' cannot be invoked as a function. The function 'invoke()' is not found

  • gpt에 질문하니까

    이 에러 메시지는 EmptyResponse라는 객체를 함수처럼 호출하려고 했을 때 발생합니다. 즉, EmptyResponse()와 같은 형태로 사용했지만, EmptyResponse는 함수가 아니기 때문에 호출할 수 없다는 의미입니다.

    라고 하는데, 나는 return 할 때 EmptyResponse() 가 아닌 EmptyResponse 로 했는데, 좀 다르긴 했다.

혹시나 해서 decompile도 비교해봤다.

  • invoke() 없을 때 decompile

  • invoke() 을 때 decompile

  • decompile을 했을 때도 새로 추가한 invoke()만 추가되고 다른 변경된게 없어서 더 모르겠다.

아무튼 invoke()를 추가했을 때 build는 성공적으로 됐다.
그래서 혹시나 객체 내에 선언한게 아무것도 없어서 그런가해서 밑에 처럼 변수를 추가해서 build 테스트를 다시 해봤는데, 동일한 invoke() not found 에러가 발생했다. 변수나 메소드가 없는게 문제는 아닌 것 같고, object 자체를 응답으로 사용하기 위해서는 invoke를 오버로딩 해야하는 것 같다.

  • 결국 결론은 github gradle build와 내 프로젝트 gradle build의 환경설정이 뭔가 다른것같다. (gradle 버전은 동일했지만 뭐가문제인진 모르겠음)
  • object를 사용하면서 invoke 메소드를 gradle build때문에 추가하는 것 보다는 companion object로 객체를 만들어서 반환하는게 더 나을 것 같다고 판단되어
    object -> class 로 변경 후 companion object를 추가해서 emptyResponse를 반환하게 했다.
profile
백엔드를 공부하고 있습니다.
post-custom-banner

0개의 댓글