enum 클래스란??
- 간단하게 말해서 상수(변하지 않는 값)을 다루는 클래스를 말한다
- 허용값이 제한되기 때문에 의미 파악이 상대적으로 쉽다
enum 클래스 작성 방법
enum class Direction {
NORTH, SOUTH, WEST, EAST
}
- 위와 같이 enum을 명시해주고 상수들을 쉼표 단위로 작성할 수 있다
- 상수도 enum 클래스의 인스턴스 이므로 아래와 같이 초기화가 가능하다
- Application에서 사용하는 외부 Api를 쉽게 관리가 가능하다
enum class Color(val rgb: Int) {
RED(0xFF0000),
GREEN(0x00FF00),
BLUE(0x0000FF)
}
- enum 클래스는 interface를 상속을 받아서 구현이 가능하지만 모든 항목에 대한 인터페이스 맴버의 공통 구현을 제공하거나 익명 클래스 내의 각 항목에 대한 별도의 구현을 제공한다
- 모든 enum 클래스는 기본적으로
comparable
인터페이스를 구현하게 된다
- enum 클래스는 정의된 enum 상수들을 나열하고 해당 이름으로 enum 상수를 가져오는 합성 속성과 메서드가 있다
EnumClass.valueOf(value: String): EnumClass
EnumClass.entries: EnumEntries<EnumClass> // specialized List<EnumClass>
enum class RGB { RED, GREEN, BLUE }
fun main() {
for (color in RGB.entries) println(color.toString()) // prints RED, GREEN, BLUE
println("The first color is: ${RGB.valueOf("RED")}") // prints "The first color is: RED"
println("The Second color is: ${RGB.GREEN}")
}
- 위와 같이 먼저 클래스를 정의한 다음에 클래스의 valueor를 사용하여 정의하는 방법도 있고 직접 사용하는 방법도 있다
- 만약에 enum 클래스 내부에 있지 않은 코드를 사용하려고 시도할 경우
IllegalArgumentException
아 벌샹헌더
내부 속성
name
: enum 클래스 내부 속성의 이름을 알려준다
ordinal
: enum 클래스 내부에서 enum 상수들의 위치를 알려준다
왜 사용할까
- 다양한 이유가 있지만 가장 중요안 이유는 인스턴스 생성과 상속을 방지하며 상수 값의 안정성을 보장하기 위해서 사용한다