프로그래밍 언어/코틀린 기본

[코틀린 기초] Data Class, Enum Class

Per ardua ad astra ! 2021. 3. 4. 01:09
lesson 25 Data Class와 Enum Class

 

Data Class


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

1. equals() 
   => 내용의 동일성 체크 메소드


2. hashcode()
   => 클래스의 내용에서 고유한 코드를 생성하는 메소드


3. toString()
   => 포함된 속성을 보기 쉽게 나타내는 메소드


4. copy()
   => 객체를 복사하여 새 객체를 만들어 주는 메소드
   다른 패러미터로 교체하여 복사할 수도 있다.
   ex)
   val a = Data("A", 7)
   val b = a.copy("B")


5. componentX()
   => 속성에 순서대로 접근할 수 있는 함수
   ex)
   Data("A", 7) 
   Component1()은 값 A
   Component2()는 값 7

 

hashCode(), equals(), toString(), copy() 메소드 예제

fun main() {
    
    val a = General("석우", 97)
    println(a == General("석우", 97))
    println(a.hashCode())
    println(a)
    
    println()
    
    val b = Data("석우", 97)
    println(b == Data("석우", 97))
    println(b.hashCode())
    println(b)
    
    println()
    
    println(b.copy())
    println(b.copy("아린"))
    println(b.copy(id = 101))
}

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

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

 

실행결과

 

a는 일반 class로 만들어진 객체, b는 data class로 만들어진 객체이다.

a와 b의 결과를 비교하여 data class의 편리성을 확인해 보자.

 

 

componentX() 예제

fun main() {
    
    val list = listOf(Data("보영", 123),
                     Data("루다",456),
                     Data("아린",789)
                     )
    
    for((a,b) in list){
        println("${a} ${b}")
    }
    
    println()
    
    for (i in list){
        println("${i.component1()} ${i.component2()}")
    }
    
    println()
    
    for (i in list){
        println(i)
    }
    
    
}

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

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

 

실행결과

for((a,b) in list)로 해서 a,b로 접근하는 것과

for(i in list)로해서 i.component1(), i.component2()로 접근하는 것이 같다. 즉 for에서 소괄호에 쓰인 a,b도 componentX()을 기능을 사용한 것이다.

componentX() 메소드를 이용하여 속성에 더 쉽게 접근할 수 있음을 알자.


Enum Class

enumerated type = 열거형

 

class안에 해당 클래스의 인스턴스가 속성으로 존재? 한다고 알아두자. 쓰일 일이 많을 것 같진 않다.

 

소스예제


fun main(){

    var state = State.SING
    println(state)
    println(state.isSleeping())
    println()

    // 변경 안됨
    state.message = "키야"
    println(State.SING)
    println(state)
    println()

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

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

enum class State(var message : String){
    SING("노래를 부르자"),
    EAT("밥을 먹자"),
    SLEEP("잠을 자자");

    fun isSleeping() = this == State.SLEEP
}

 

실행결과

 

학습 출처

테크과학! DiMo-디모의 Kotlin 강좌 (lesson 25)

(www.youtube.com/playlist?list=PLQdnHjXZyYadiw5aV3p6DwUdXV2bZuhlN)

구독과 좋아요 !