본문 바로가기

Android

IntDef, StringDef 사용법

안드로이드에서는 enum 사용에대해 보통 비추천을 하고 있기 때문에 숫자 또는 문자열로 기준 값을 정의 한 뒤 
이를 기준으로 값을 비교 하는 형태가 주인데 문제는 enum 과 같이 딱 떨어지는 값이 아니다 보니 
예외 상황이 발생될 가능성이 존재하게 된다. 
 
이를 보안하기 위해 @IntDef 또는 @StringDef 로 지정하여 사용하는 것인데 이에 한 예제는 아래와 같다. 
 
interface IWindowDelegate {
    companion object {
        const val WINDOW            = 0
        const val POPUP_WINDOW      = 1
    }
}
 
@IntDef(value = [
    IWindowDelegate.WINDOW,
    IWindowDelegate.POPUP_WINDOW
])
annotation class WindowDelegateType
 
가령 윈도우가 두가지 타입이 존재하고 이를 IntDef 를 통해 선언하였다면 
아래와 같이 사용가능 하다. 
 
@WindowDelegateType
val type: Int
 
저렇게 지정해 두었기 때문에 만약 IntDef 내의 값이 아니라면 에디터에서 오류를 확인할 수 있다.