[Kotlin] Data Class와 Enum Class 설명 & 예제

728x90

특별한 기능이나 형태의 클래스

Data Class

데이터를 다루는데 최적화된 class로 '5가지'기능을 내부적으로 자동으로 생성해준다

  1. 내용의 동일성을 판단하는 equals()의 자동 구현
  2. 객체의 내용에서 고유한 코드를 생성하는 hashcode()의 자동구현
  3. 포함된 속성을 보기쉽게 나타내는 toString()의 자동구현
  4. 객체를 복사하여 똑같은 내용의 새 객채를 만드는 copy()의 자동 구현
    • 아무 패러미터가 없으면 똑같은 내용으로 생성
      • val a = Data("A",7)
      • val b = a.copy()
    • 패러미터가 있다면 해당 패러티머를 교체하여 생성
      • val a = Data("A",7)
      • val b = a.copy("B")
        • b ->Data("B",7) 로 생성
  5. 속성을 순서대로 반환하는 componenetX()의 자동구현
    • Data("A",7)에서 A와 component1() , 7와 component2()
    • 배열이나 리스트에 Data 담겨있을때 지원하기 위한 함수

예제1

fun main() {
    val a = General("보영", 212)

    println(a == General("보영",212))
    println(a.hashCode())
    println(a)

    println()

    val b = Data("루다",306)

    println(b == Data("루다",306))
    println(b.hashCode())
    println(b)

    println(b.copy())
    println(b.copy("아린"))
    println(b.copy(id = 618))
}

class General(val name: String, val id: Int)

data class Data(val name: String, val id: Int)

 

예제2

fun main() {
    val list = listOf(
        Data("보영", 212),
        Data("루다", 306),
        Data("아린", 618)
    )

    //두개의 속성 순회
    for((a,b) in list) {
        println("${a}, ${b}")
    }
}

class General(val name: String, val id: Int)

data class Data(val name: String, val id: Int)

 

Enum class

enumerated type의 준말 -> '열거형'
상태를 구분하기위한 객체들을 이름을 붙여 여러개 생성해두고 그중 하나를 선택하여 나타내기위한 클래스

  • enum 클래스는 관용적으로 상수를 나타낼때 사용하는 대문자로 기입
  • enum의 객체들은 고유한 속성을 가질 수 있다
  • 일반 클래스처럼 함수도 추가 할 수 있다.
enum class Color(val number: Int) {
    RED(1),
    BLUE(2),
    GREEN(3);

    fun isRed() = this == Color.RED
}

예제

fun main() {
    var state = State.SING
    println(state)

    state = State.SLEEP
    println(state.isSleeping())

    state = State.EAT
    println(state.message)
}

enum class State(val message: String) {
    SING("노래를 부릅니다"),
    EAT("밥을 먹습니다"),
    SLEEP("잠을 잡니다");

    //잠을 자는지 여부를 boolean으로 리턴 하는 함수
    // 비교대상은 자기자신 즉 State가 되므로 this
    fun isSleeping() = this == State.SLEEP
}

 

Data 클래스와 Enum 클래스는 일반 클래스에서 제공되지 않는 특정한 용도의 기능들을 제공하고 있으므로 여러 상황에서 유요하게 사용가능

728x90

댓글

Designed by JB FACTORY