[Android] Android Constants

Jay·2021년 1월 18일
0

Android

목록 보기
10/39
post-thumbnail

🙋‍♂️ 이 주제라면 java/kotlin에 쓰여야 하지 않을까?

👋 Constant의 정의보단 Android에서 Constant을 효과적으로 하기위해 쓰는것이다.

Constant

  • 변하지 않는 값.
  • 프로그램이 실행되는 동안 값 변경이 불가하다.

상수를 정의하는 방법

  • final static (val)
  • Enum
  • TypeDef

final static(val)

  • 보통 하나의 class에서 final static으로 상수를 정의한다.

👍 장점

  • 간단하게 상수 정의가 가능하다.
  • static을 사용해서 메모리 한번만 적재된다.(메모리를 적게 차지한다)

👎 단점

  • 코드의 가독성이 떨어진다.
  • 타입에 대한 안정성을 보장 받을 수 없다.
class Color{
	public final static int RED = 0;
	public final static int BLUE = 1;
	public final static int GREEN = 2;
}

companion object{
	const val RED = "red"
    	const val BLUE = "blue"
    	const val WHITE = "white"
}

Enum

  • 열거형 이란 의미로 서로 연관된 상수들의 집합이다.
  • 다른 상수들에 비해 코드가 간결해지고 직관성이 좋아진다.

하지만, 메모리 성능 상 문제로 쓰지말란 이유가 있던데..?

15년도 구글에서 유튜브에 관련하여 영상을 올렸었다.
https://www.youtube.com/watch?v=Hzs6OBcvNQE&feature=youtu.be

👍 장점

  • 가독성이 좋다.
  • 타입에 대한 안정성을 보장 받을 수 있따.(정의한 타입이 아닌 다른 타입을 대입하면 컴파일 에러를 발생시킨다.)

👎 단점

  • ENUM은 앱의 코드(DEX) 크기와 런타임 메모리 사용량을 증가시킨다.
  • 일반 상수보다 메모리를 10배 넘게 더 차지한다고 한다.. (위의 영상을 보면 알 수 있다.)

👆 간단하게만 말하자면,
- Android는 시스템 메모리에 메모리를 할당한다.
- 할당된 메모리는 앱의 코드와 실행 중에 동적으로 사용하는 메모리에 사용된다.
- 이때 앱의 코드는 Android 앱을 빌드할 때 생성되는 DEX file이다.
- 즉, DEX 파일의 크기가 증가하면서 APK 파일도 커지고 앱이 실행될 떄 사용하는 메모리 양도 늘어난다.

enum class Color{
	RED,BLUE,GREEN
}

Typedef

  • ENUM의 단점으로 추천되는 상수형이다.
  • 어노테이션을 통해 메모리를 덜 사용하면서 Enum의 장점인 컴파일 시 타입을 확인 할 수 있어서 안정성을 보장 받을 수 있는 기능이다.

아래와 같이 정의를 하고, 사용하면 된다.

class Car {
    companion object{
        @IntDef(SLOW, NORMAl, FAST)
        @Retention(AnnotationRetention.SOURCE)
        annotation class Speed

        const val SLOW = 1
        const val NORMAl = 2
        const val FAST = 3
    }

    @Speed
    private var speed : Int = SLOW

    fun setSpeed(@Speed speed:Int){
        this.speed = speed
    }
}
profile
developer

0개의 댓글