본문 바로가기

Android/기타

[Android] 상수 관리하기

반응형

기존 상수 관리에는 2가지 방법이 있다.

1. 클래스 하나를 생성한 후 상수를 넣는 방법

  • 장점
    • 시스템 메모리를 적게 차지
  • 단점
    • 코드상으로 안전 장치가 없음

2. Enum으로 관리하는 방법

  • 단점
    • 그냥 상수보다 시스템 메모리를 약 13배 차지(int의 경우)
    • 런타임 메모리 오버헤드 증가
  • 장점
    • 컴파일, 런타임 단계에서 체크 가능

안드로이드에서는 이러한 두 가지 방법의 장점을 둘 다 이용하기 위해 TypeDef라는 Annotation을 제공하고 있으며 또한 Proguard에서도 Enum 타입에 대한 최적화를 도와준다고 한다. 다만 proguard를 이용하는 방법은 완벽한 최적화를 보장하지 않기 때문에 최대한 TypeDef를 이용하는 것이 좋을 것 같다.

TypeDef를 이용하는 방법은 다음과 같다. String 역시 IntDef 대신 StringDef로 수정하고 int 상수를 String 상수로 대체하면 된다. 다음은 대표적인 예인 View의 소스 코드 중 일부이다.

class View {
    @IntDef({VISIBLE, INVISIBLE, GONE})
    @Retention(RetentionPolicy.SOURCE)
    public @interface Visibility {}

    public static final int VISIBLE = 0x00000000;
    public static final int INVISIBLE = 0x00000004;
    public static final int GONE = 0x00000008;

}

참고 : https://www.youtube.com/watch?v=Hzs6OBcvNQE&feature=youtu.be

반응형