[Kotlin][Android] ์๋๋ก์ด๋ ENUM์ ๋ํด์(IntDef , StringDef์ ์ฌ์ฉ๋ฒ)
์๋ ํ์ธ์ ๐
์ค๋์ ํ์ฌ์์ ์ ๋ฌด๋ฅผ ํ๋ ์ค enum class ์ฌ์ฉ์ ๋ํ ํผ๋๋ฐฑ์ ๋ฐ์ผ๋ฉฐ
์๋กญ๊ฒ ๊ณต๋ถํ๊ฒ ๋ @IntDef , @StringDef์ ๋ํด์
๊ฐ๋จํ๊ฒ ํฌ์คํ ํด๋ณผ๊น ํฉ๋๋ค. ๐

Kotlin ๋ฐ Java์์ ๊ณ ์ ๋ ๊ฐ์ ์ ์ํ์ฌ ์ฌ์ฉํ ๋ ์ฃผ๋ก ์์๋ฅผ ์ง์ ํ์ฌ ๋ง์ด ์ฌ์ฉํฉ๋๋ค.
ํด๋น ์์๋ค์ ํ์ ์ผ๋ก ๋ฌถ์ด์ ์ฌ์ฉํ๊ณ ์ถ์๋๋ enum class๋ฅผ ์ง์ ํ์ฌ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ด๋ค ์์์ ๊ฒ๋๋ค.
ํ์ง๋ง Android์์ enum class๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ฑ์ ํฌ๊ธฐ๊ฐ ์ปค์ง๊ณ ํผํฌ๋จผ์ค์ ์ผ๋ก ๋ฌธ์ ๋ฅผ ๋ฐ์ํ ์ ์์ด
์ฌ์ฉ์ ์ง์ํ๊ณ ์์ต๋๋ค. ํนํ, TV๋ AVN๊ฐ์ ์ ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ์ง๋ ๊ธฐ๊ธฐ์์๋ ์ทจ์ฝํ ์ ์์ต๋๋ค!
(์ฐธ๊ณ ์๋ฃ๋ ์๋ ๋งํฌ๋ฅผ ํตํด ํ์ธ ๋ถํ๋๋ฆฝ๋๋ค.)
Android Performance: Avoid using ENUM on Android
What and why we use ENUM?
medium.com
๊ทธ๋ ๋ค๋ฉด enum์ ์ฌ์ฉํ์ง ์๊ณ ๋ฌด์กฐ๊ฑด ์์๋ก๋ง ๊ฐ์ ์ง์ ํด์ผ ํ ๊น์?? ๐ค
enum์ ๋์ฒดํ ๋ฐฉ๋ฒ์ ๋ฐ๋ก @IntDef , @StringDef๋ฅผ ํตํด ๊ฐ์ ์ ์ํด์ฃผ๋ ๊ฒ๋๋ค.
์ฌ์ฉ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ์ต๋๋ค.
/*enum class Type {
INT, STRING, CHAR
}*/
/*enum class VALUES(value: Int) {
VALUE1(1), VALUE2(2), VALUE(3)
}*/
private interface IType {
companion object {
const val INT = "INT"
const val STRING = "STRING"
const val CHAR = "CHAR"
}
}
private interface IValue {
companion object {
const val VALUE1 = 1
const val VALUE2 = 2
const val VALUE3 = 3
}
}
@Target(AnnotationTarget.TYPE, AnnotationTarget.PROPERTY)
@StringDef(value = [IType.INT, IType.STRING, IType.CHAR])
private annotation class TYPE
@Target(AnnotationTarget.TYPE, AnnotationTarget.PROPERTY)
@IntDef(value = [VALUE1, VALUE2, VALUE3])
private annotation class VALUE
class MainActivity : AppCompatActivity() {
@TYPE
var type: String = INT
@VALUE
var value: Int = VALUE1
fun checkType() {
when (type) {
INT -> {}
STRING -> {}
CHAR -> {}
}
}
fun checkValue() {
when (value) {
VALUE1 -> {}
VALUE2 -> {}
VALUE3 -> {}
}
}
}
IntDef(Value) , StringDef(Type) ๊ฐ๊ฐ ์์์ ์ฒ๋ผ ์ ์ํ ์ ์์ผ๋ฉฐannotation class์๋ ์๋์ ๊ฐ์ ์ต์ ์ด ์กด์ฌํฉ๋๋ค.
ํ์์ ๋ฐ๋ผ ์ค์ ํ์ฌ ์ฌ์ฉํ๋ฉด๋ฉ๋๋ค!
์ด๋ฆ | ์ค๋ช |
@Target | ์ด๋
ธํ
์ด์
์ ๋ฌ ์ ์๋ ๊ตฌ์ฑ ์์ ์ ์ (์ด๋ค๊ฒ์ผ๋ก ์ฌ์ฉํ ๊ฑด์ง) ex) @Target(AnnotationTarget.TYPE) var type: String |
@Retention | ์ด๋
ธํ
์ด์
์ด ๋จ์์๋ ๋จ๊ณ๋ฅผ ์ ์ ํฉ๋๋ค. (์์ค(SOURCE), ์ปดํ์ผ ํ์(BINARY), ๋ฐํ์(RUNIME) ์ค) ex) @Retention(AnnotationRetention.RUNTIME) var type: String |
์ค๋์ ๊ฐ๋จํ ํฌ์คํ ์ผ๋ก ์ฐพ์๋ต์ต๋๋ค. ๐
์ด ํฌ์คํ ์ด ์ฌ๋ฌ๋ถ์๊ฒ ๋ง์ ๋์์ด ๋์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค.
์ค๋๋ ์ฆ์ฝํ์ธ์ :)