개발(Android)/kotlin syntax

[Kotlin syntax] Data Class, Enum Class

shinyelee 2022. 4. 8. 22:59

[코틀린 문법] 데이터 클래스와 열거형 클래스

Data Class(데이터 클래스)

// Data Class(데이터 클래스) //

// 데이터를 다루는 데 최적화된 클래스
// 서버에서 받아온 데이터를 넣을 때 사용

fun main() {

    // 데이터 클래스에서 자동으로 구현하는 기능 //

    // 1. equals() <- 내용의 동일성 판단
    // 2. hashcode() <- 객체의 내용에서 고유한 코드를 생성
    // 3. toString() <- 포함된 속성을 보기쉽게 나타냄
    // 4. copy() <- 객체를 복사해 똑같은 내용의 새 객체 생성
    // 5. componentX() <- 속성을 순서대로 반환

    // 사용자가 직접 호출하기 위한 함수가 아님
    // -> 배열이나 리스트 등에 데이터 클래스의 객체가 담겨있을 때,
    // -> 이 내용을 자동으로 꺼내 쓸 수 있는 기능을 지원하기 위한 함수임

    val a = General("신비", 1)

    println(a == General("신비", 1))
    println(a.hashCode())
    println(a)
//    false
//    885951223
//    General@34ce8af7

    val b = Data("은하", 2)

    println(b == Data("은하", 2))
    println(b.hashCode())
    println(b)
//    true
//    50711786
//    Data(name=은하, id=2)

    println(b.copy())
    println(b.copy("엄지"))
    println(b.copy(id = 3))
//    Data(name=은하, id=2)
//    Data(name=엄지, id=2)
//    Data(name=은하, id=3)

}

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

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

    val list = listOf(Data("보나",8),
                      Data("설아",12),
                      Data("루다", 2))

    for((a, b) in list) {
        println("${a}, ${b}")
    }



    val justDog = JustDog("파트라슈", 11)
    println(justDog.name)
    println(justDog.age)
    println(justDog.toString())

    val dataDog = DataDog("파트라슈 친구", 15)
    println(dataDog.name)
    println(dataDog.age)
    println(dataDog.toString())

    // 복붙해서 일부만 변경 가능
    val dataDog2 = dataDog.copy(name = "파트라슈 여친")
    println(dataDog2.toString())

}

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

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



// 일반 클래스
class JustDog(var name : String, var age : Int)

// 데이터 클래스
data class DataDog(var name : String, var age : Int)

// 데이터 클래스 보충설명

fun main() {

    // 데이터 클래스
    val ticketA = Ticket("korean", "shinyelee", "2022-05-24", 11)

    // 객체의 내용을 출력
    println(ticketA)
//    Ticket(company=korean, name=shinyelee, date=2022-05-24, seatNum=11)

    // 일반 클래스
    val ticketB = Ticket2("korean", "shinyelee", "2022-05-24", 11)

    // 메모리 주소값을 출력
    println(ticketB)
//    Ticket2@b684286

}

// 데이터 클래스
data class Ticket(val company : String, val name : String, var date : String, var seatNum : Int)

// 일반 클래스
class Ticket2(val company : String, val name : String, var date : String, var seatNum : Int)

// toString(), hashCode(), equals(), copy()

Enum Class(열거형 클래스)

// Enum(enumerated type) Class(열거형 클래스) //

// 클래스 내 객체는 관행적으로 대문자로 기술
// 클래스 내 객체는 고유한 속성 가짐(생성자 있으면 객체 선언시 속성 설정 가능)
// 클래스 내 함수 기술시 마지막 객체 뒤에 세미콜론(;) 붙인 후 추가

fun main() {

    var state = State.SING
    println(state)
//    SING
    
    state = State.SLEEP
    println(state.isSleeping())
//    true
    
    state = State.EAT
    println(state.message)
//    밥을 먹습니다


    println(Direction.NORTH)
//    NORTH
    
    Direction.values().forEach {
        println(it)
    }
//    NORTH
//    SOUTH
//    WEST
//    EAST



    CustomerType.values().forEach {
        println(it)
    }
//    A
//    B
//    C
//    D
//    VIP



    val direction = Direction.EAST
//    E
    
    when(direction) {
        Direction.NORTH -> {
            println("N")
        }
        Direction.SOUTH -> {
            println("S")
        }
        Direction.WEST -> {
            println("W")
        }
        Direction.EAST -> {
            println("E")
        }
    }



    val color = Color.GREEN
//    초록
    
    when(color) {
        Color.RED -> {
            println(Color.RED.colorName)
        }
        Color.GREEN -> {
            println(Color.GREEN.colorName)
        }
        Color.BLUE -> {
            println(Color.BLUE.colorName)
        }
    }



    println(Device.DEVICE_ON.status)
//    ON
    
    Device.DEVICE_ON.status = "OFF"
    println(Device.DEVICE_ON.status)
//    OFF

}

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

enum class Device(var status : String) {
    DEVICE_ON("ON"),
    NETWORK("OFF"),
    LOCATION("SEOUL")
}

enum class Color(val colorName : String) {
    RED("빨강"),
    GREEN("초록"),
    BLUE("파랑")
}

enum class Direction {
    NORTH, SOUTH, WEST, EAST
}

enum class CustomerType {
    A, B, C, D, VIP
}

참고

 

[입문편] 안드로이드를 위한 코틀린(Kotlin) 문법 - 인프런 | 강의

코틀린 문법 기초 강의입니다. 안드로이드 앱을 코틀린 언어로 개발하고 싶으신 분들을 위한 강의이고, 기초부터 튼튼하게 코틀린 문법을 재미있게 공부할 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com

반응형