kotlin
[Kotlin] @JvmOverloads - 생성자/함수 손쉽게 오버로딩
danuri
2025. 2. 23. 23:37
Kotlin으로 생성자를 만들 때, 다음과 같이 default value를 지정할 수 있다.
data class TestDto(
val one: String = "1",
val two: String = "12",
val three: String = "123",
)
생성자를 사용하는 곳에서도 다음과 같이 파라미터를 직접 명시해서 편하게 생성자를 호출할 수 있다.
TestDto(one = "1", three = "234")
-> 이러면 two 프로퍼티에는 default value가 들어간다.
그러나 java에서 kotlin의 객체를 사용한다면?
이렇게 전체 생성자 혹은 기본 생성자만 생성할 수 있게 된다.
kotlin처럼 유연하게 생성자를 만들고 싶어서, 각 케이스별로 kotlin에 부 생성자를 정의하기에는 귀찮기도 하다.
이럴 때 유용한게 @JvmOverloads다.
data class TestDto @JvmOverloads constructor(
val one: String = "1",
val two: String = "12",
val three: String = "123",
)
다시 java 코드로 가보자.
이처럼 @JvmOverloads는 kotlin 생성자나 함수의 파라미터에 default value를 제공할 때,
자동으로 여러 개의 오버로딩 버전을 생성해주는 애노테이션이다.
다만, 다음 kotlin 코드처럼 첫 번째 & 세 번째 인자로 객체를 생성하는 생성자는 제공하지 않는다.
TestDto(one = "1", three = "234")
-> default value가 있는 파라미터 순서에 의존한 생성자들을 제공하고 있다.