티스토리 뷰

enum값은 미리정의된 타입에서 값을 가져와서 사용하기 때문에 대체적으로 안정적입니다.

스트링을 하드코딩하는거보다는요.

 

1. 기본적인 선언

enum class CustomType {
    NORMAL, MEDIUM, BEST
}

 

2. 초기화를 하여주는 타입. 타입이 있는 타입?

enum class CustomType(val name: String) {
    NORMAL("normal"),
    MEDIUM("medium"),
    BEST("best")
}

이렇게 사용 가능합니다.. val type = CustomType.MEDIUM.name => medium

 

3. 상태에 따른 값을 가져와서 사용

enum class CustomType {
  NORMAL {
    override fun index() = 1
    override val isHidden: Boolean
      get() = true
  },
  MEDIUM {
    override fun index() = 2
    override val isHidden: Boolean
      get() = false
  },
  BEST {
    override fun index() = 3
    override val isHidden: Boolean
      get() = false
  };

  abstract fun index() : Int
  abstract val isHidden : Boolean
}

// use
val test = CustomType.NORMAL.index()
val test2 = CustomType.MEDIUM.isHidden

이건 요즘 많이 사용하는 방법이죠... 상태만 전달하고 나머지 값은 알아서 처리하도록 하는

 

4. Interface를 이용한 상태값 가져오기

interface Customable {
  fun index() : Int
  val isHidden : Boolean
}

enum class CustomType : Customable {
  NORMAL {
    override fun index() = 1
    override val isHidden: Boolean
      get() = true
  },
  MEDIUM {
    override fun index() = 2
    override val isHidden: Boolean
      get() = false
  },
  BEST {
    override fun index() = 3
    override val isHidden: Boolean
      get() = false
  }
}

분리되어서 3번 타입보다는 좋아보입니다. 이건 입맛에 맞도록 사용하면 될것 같음.

 

5. companion object

enum class CustomType {
  // Code
  
  companion object  {
    val default: CustomType
      get() = NORMAL
  }
}

// Use
val test = CustomType.default

 

6. Enum을 가져와서 사용하는 방법

// valueOf를 이용하는 방법
val type = CustomType.valueOf("NORMAL")

// for문을 이용
for (type in CustomType.values()) {
  // get
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함