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
로 작성되었고
이를 외부에서 주입하고 있는 모습을 확인할 수 있다.