
[코틀린 문법] 데이터 클래스와 열거형 클래스
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
반응형
    
    
    
  '개발(Android) > kotlin syntax' 카테고리의 다른 글
| [Kotlin syntax] Collection Functions (1) (0) | 2022.04.09 | 
|---|---|
| [Kotlin syntax] Collections (2) Set, Map (0) | 2022.04.09 | 
| [Kotlin syntax] Nested Class, Inner Class (0) | 2022.04.08 | 
| [Kotlin syntax] Arguments, Infix Functions (0) | 2022.04.08 | 
| [Kotlin syntax] Equality (0) | 2022.04.08 |