티스토리 뷰

반응형

enum Class 를 사용하는 이유

  • 코드가 단순해지며, 가독성 UP
  • 인스 턴스 생성과 상속을 방지, 상수값의 타입 안정성 보장
enum class Direction {
	NORTH, SOUTH, WEST, EAST
}

fun main(args: Array<String>) {
	getDirection(Direction.NORTH)
	getDirection(Direction.SOUTH)
	getDirection(Direction.WEST)
	getDirection(Direction.EAST)
}

fun getDirection(d : Direction){
	when(d){
		Direction.NORTH -> println("북쪽")
		Direction.SOUTH -> println("남쪽")
		Direction.WEST -> println("서쪽")
		Direction.EAST -> println("동쪽")
	}
}
/*
	실행 결과
	북쪽
	남쪽
	서쪽
	동쪽
*/
// 각 열거 형은 enum 클래스의 인스턴스이기 때문에 다음과 같이 초기화 할 수 있습니다.
enum class Color(val rgb: Int, val colorName: String) {
	RED(0xFF0000, "빨강"),
	GREEN(0x00FF00, "초록"),
	BLUE(0x0000FF, "파랑")
}

fun main(args: Array<String>) {
	getColor(Color.RED)
	getColor(Color.GREEN)
	getColor(Color.BLUE)
}

fun getColor(c: Color) {
	when (c) {
		Color.RED -> println(c.colorName)
		Color.GREEN -> println(c.colorName)
		Color.BLUE -> println(c.colorName)
	}
}
/*
    실행 결과
    빨강
    초록
    파랑
*/
/*
    enum 상수는 자신의 익명 클래스도 선언할 수 있다.
    enum 클래스가 멤버를 정의하는 경우 Java에서와 마찬가지로
	멤버 정의에서 열거 형 상수 정의를 세미콜론으로 구분해야합니다.
    Enum 항목에는 내부 클래스가 아닌 중첩 형식을 포함 할 수 없습니다
*/
enum class ConnectState {
	SUCCESSFUL{
		override fun signal() = println("연결 성공")
	},
	FAILURE {
		override fun signal() = println("연결 실패")
	};
	abstract fun signal()
}

fun main(args: Array<String>) {
	ConnectState.SUCCESSFUL.signal()
	ConnectState.FAILURE.signal()
}
/*
    실행 결과
    연결 성공
    연결 실패
*/

 

위 코드를 이해하기 위해서는 아래 코틀린 문법이 필수입니다.

2019/05/19 - [Kotlin] - 코틀린 기초 문법) 1. 코틀린 변수 정의하기

2019/05/19 - [Kotlin] - 코틀린 기초 문법) 2. 코틀린 함수 정의하기

2019/05/19 - [Kotlin] - 코틀린 기초 문법) 5. 코틀린 조건식 if, when, switch 문 사용하기

2019/05/24 - [Kotlin] - 코틀린 기초 문법) 12. 코틀린 오버라이딩, 오버로딩 알아보기

2019/05/25 - [Kotlin] - 코틀린 기초 문법) 15. 코틀린 추상 클래스 및 인터페이스

반응형
댓글
최근에 올라온 글
최근에 달린 댓글