[Android/Kotlin] Enum Class

[Android/Kotlin] Enum Class

📌 Enum Class?

열거형이라는 방식을 사용 (특정한 값을 0 ~ 끝까지 나열한다는 느낌)

내가 사용한 방식은 진입 타입을 설정할 때 사용하였다.

이해와 사용

  • 다음과 같이 titleid값을 주어주고 사용도 가능하고
enum class ContentType(val title: String, val id: Int) {
    ADD("저장",2), EDIT("수정",3), REMOVE("삭제",1)
}
fun test(){
  ContentType.EDIT.id
}

  • name, ordinal 값으로도 사용이 가능한데
    • name은 Enum Class의 이름인 “ADD”
    • ordinal은 Enum Class의 index인 “0”을 가져오게 된다.
enum class TodoContentType {
    ADD, EDIT, REMOVE;
}
fun test(){
  contentType.ADD.name
  contentType.Add.ordinal
}
  • 그 이후 name, ordinal로 뽑아온 값을 다시 Enum Class로 변환하는 작업이 필요하다.
enum class TodoContentType {
    ADD, EDIT, REMOVE;

    companion object {
        fun from(name: String?): TodoContentType? {
            return TodoContentType.values().find {
                it.name.uppercase() == name?.uppercase()
            }
        }
    }
}
  • 다음은 name 값을 가지고 다시 EnumClass로 Converting 즉 변환하는 코드인데
  • TodoContentType.values().find 로 Array Type을 순회하면서 클래스 상의 name과 들어온 name이 일치하는 경우 EnumType으로 Return 하는 코드이다.

⭐️⭐️⭐️

여기서 추가적으로 name 에 소문자가 들어오는 Case까지 보완해주기 위하여 모두 uppercase(대문자)처리를 해준 이후 비교해주는 코드이다.

참고용 진입타입 받아오는 방식

  • intent
fun newIntentForEdit(
            context: Context,
            position: Int,
            todoModel: TodoModel
        ) = Intent(context, TodoContentActivity::class.java).apply {
            putExtra(EXTRA_TODO_ENTRY_TYPE, TodoContentType.EDIT.name)
            putExtra(EXTRA_TODO_POSITION, position)
            putExtra(EXTRA_TODO_MODEL, todoModel)
        }
  • 지연초기화 사용해 EXTRA_TODO_ENTRY_TYPE 선언
private val entryType by lazy {
    TodoContentType.from(intent.getStringExtra(EXTRA_TODO_ENTRY_TYPE))
}
  • 타입별 처리 예시
fun test(){
        when (entryType){
            TodoContentType.ADD -> 
            TodoContentType.EDIT -> 
            null -> 
        }
    }

© 2023. All rights reserved.

by SoftyChoo