클래스를 선언할 때 class 클래스이름 이렇게 사용했다면, enum클래스는 class앞에 enum 키워드를 붙여주면 된다.
enum class Rank {
FIRST, SECOND, THIRD
}
다음과 같이 각 상수에 값을 부여하여 사용한다.
enum class Rank(val rank: Int, val score: Int) {
FIRST(1, 10),
SECOND(2, 8),
THIRD(3, 6);
}
fun main() {
println(Rank.FIRST.score) // 10출력
}
함수를 정의하여 공통된 기능을 넣거나, companion object 로 자바의 static 메소드처럼 enum 내부에서 로직을 구현할 수 있다.
함수 정의
enum class Rank(val rank: Int, val score: Int) {
FIRST(1, 10),
SECOND(2, 8),
THIRD(3, 6);
// 함수 정의
fun isWinning(): Boolean = this == FIRST
}
fun main() {
println(Rank.FIRST.isWinning()) // true
println(Rank.SECOND.isWinning()) // false
println(Rank.THIRD.isWinning()) // false
}
componion object
enum class Rank(val rank: Int, val score: Int) {
FIRST(1, 10),
SECOND(2, 8),
THIRD(3, 6);
fun isWinning(): Boolean = this == FIRST
companion object {
fun fromRank(rank: Int): Rank? {
return values().find { it.rank == rank }
}
}
}
fun main() {
val result = Rank.fromRank(2)
println(result) // SECOND
println(result?.isWinning()) // false
}
오늘은 enum 클래스를 제외하고 새로 익힌 문법은 없다.
어제보다 조금 더 코틀린에 익숙해졌지만 아직 for문 사용이 어색해서 계속 찾아보게 된다😂 자바와 문법적으로 많이 겹치는 것 같으면서도 아닌 부분이 곳곳에 있어서 기능 개발하는데 계속 멈칫하게되고 진도를 원활하게 빼지 못했다. 생각만큼 쉬운 작업이 아니었다는걸 체감하는 중..