Spring Boot Java & Kotlin Test Code 종속성 주입의 차이점

박준규·2023년 2월 12일
0

Java & Spring

목록 보기
3/4

Java Test Code를 Kotlin Test Code로 변환하는 도중 기록할 만한 것이 생겨 기록!

해당 내용은 배달의 민족 김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 강의를 듣고 작성되었습니다.

일반적으로 Java를 통해 TestCode DI를 진행할 때, Service와 같은 repo를 사용하게 만들기 위해 생성자를 통해 주입한다. 하지만, Kotlin의 경우 @Autowired를 사용하면, 굳이 DI를 진행하지 않아도 자동으로 만들어 준다.

혹시 몰라 Autowired로 연결된 2개의 클래스를 java로 Decompile 했는데, 아니나 다를까 @Autowired를 통해 생성자를 주입받고 있었다.

정말 가능한 기능이었다.

아래는 @Autowired를 통해 자동으로 생성자를 주입받은 kotlin code이다.

@SpringBootTest
internal class MemberServiceTest @Autowired constructor(
    private val memoryMemberRepository: MemoryMemberRepository,
    private val memberService: MemberService,
) {
    ...
}

그리고 이를 java code로 compile하면 다음과 같은 코드로 요약된다.


public class MemberServiceTest {
   private final MemoryMemberRepository memoryMemberRepository;
   private final MemberService memberService;

   ...

   @Autowired
   public MemberServiceTest(@NotNull MemoryMemberRepository memoryMemberRepository, @NotNull MemberService memberService) {
      Intrinsics.checkNotNullParameter(memoryMemberRepository, "memoryMemberRepository");
      Intrinsics.checkNotNullParameter(memberService, "memberService");
      super();
      this.memoryMemberRepository = memoryMemberRepository;
      this.memberService = memberService;
   }
}

kotlin에서 private val로 생성했기 때문에

java에서도 private final로 작성되었고

이를 외부에서 주입하고 있는 모습을 확인할 수 있다.

profile
'개발'은 '예술'이고 '서비스'는 '작품'이다

0개의 댓글