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가 있는 파라미터 순서에 의존한 생성자들을 제공하고 있다.