티스토리 뷰

Kotlin

[Kotlin] @JvmOverloads 이용하기

parkho79 2026. 4. 10. 13:13
728x90



Android app 을 개발하다 보면 커스텀 뷰(Custom View)를 정의해야 하는 경우가 자주 생긴다.

커스텀 뷰는 호출되는 시점(코드 생성 vs XML 인플레이팅)에 따라 필요한 생성자가 다르기 때문에 반드시 생성자 오버로딩이 필수적이다.

 

이번 포스팅에서는 코틀린에서 이 복잡한 생성자 오버로딩을 한 방에 해결해 주는 @JvmOverloads에 대해 알아보자.



생성자에서 @JvmOverloads 이용하기

◼ Step 1 : 생성자 매개변수에 Default 값 설정하기

코틀린은 파라미터에 기본값(Default value)을 지정할 수 있다.

먼저 하단과 같이 커스텀 뷰에서 필요한 인자들에 기본값을 선언하자.

 

◼ Step 2 : @JvmOverloads annotation 추가하기

클래스 헤더의 constructor 키워드 앞에 @JvmOverloads를 붙인다.

이 어노테이션은 컴파일러에게 "인수를 default 값으로 대체하는 생성자들을 자동으로 만들어줘!"라고 지시하는 역할을 한다.

 

◼ Step 3 : 컴파일된 결과 확인하기

@JvmOverloads를 사용하면 컴파일러가 자바에서 사용하기 편하도록 인자를 하나씩 줄인 오버로드 생성자를 하단과 같이 자동으로 생성해 준다.

 

- 자동 생성되는 생성자 목록 (Java 시점)

 1. CustomView(Context context)
 2. CustomView(Context context, AttributeSet attrs)
 3. CustomView(Context context, AttributeSet attrs, int defStyleAttr)



728x90



일반 함수에서 @JvmOverloads 이용하기

생성자뿐만 아니라 일반 함수에서도 이 기능을 활용할 수 있다.

특히 코틀린으로 만든 라이브러리를 자바 프로젝트에서 호출해야 할 때 아주 유용하다.

 

◼ Step 1 : 함수에 @JvmOverloads 적용하기

하단과 같이 로그를 남기는 함수에 어노테이션과 기본값을 설정한다.

 

◼ Step 2 : Java 에서 호출하기

자바 코드에서는 코틀린의 default parameter를 인식하지 못하지만, @JvmOverloads 덕분에 생성된 오버로드 메서드들을 하단과 같이 자유롭게 호출할 수 있다.



주의사항

자바에서 수십 줄씩 쓰던 보일러플레이트 코드를 코틀린에서는 단 한 줄로 줄일 수 있다는 것이 @JvmOverloads의 가장 큰 매력이다.

하지만 편리함 뒤에 숨어 있는 실무 밀착형 주의사항들을 몇 가지 정리했으니 꼭 확인하고 넘어가자.

 

◼ 메서드 수 증가

어노테이션 하나로 여러 개의 메서드가 생성되므로, 파라미터가 너무 많으면 메서드 수가 급격히 늘어날 수 있다.

 

◼ 파라미터 순서

자바에는 'Named Argument' 기능이 없으므로, 기본값이 있는 파라미터는 가급적 뒤쪽으로 몰아넣는 것이 좋다.

 

◼ Null 관리

코틀린의 Nullable 타입이 자바에서는 단순 참조 타입으로 보일 수 있으니 주의하자.



728x90

'Kotlin' 카테고리의 다른 글

[Kotlin] Sealed class  (0) 2026.05.07
댓글