Kotlin

[Kotlin] 데이터 클래스 및 다양한 클래스(1)

Jyuni 2023. 5. 25. 00:49

데이터 클래스

  • data class로 선언하여 사용합니다.
  • 구분은 쉼표(,)로 하고, 변수나 상수를 선언할 수 있습니다.
  • 프로퍼티를 일반 클래스와 달리 초기화 해주지 않아도 됩니다.
  • 생성과 동시에 클래스 내의 프로퍼티를 기준으로 생성자가 만들어집니다.
  • 통신이나 별도의 DB를 사용할 경우 data class를 활용합니다.
  • VO(Value Object)를 다룰 때 사용하면 유용합니다.

일반 클래스와 비교

// 일반 클래스 선언
class Info(var name: String) {
    private var age: Int = 0
    private var gender: String = ""

    constructor(name: String, age: Int, gender: String): this(name) {
        this.age = age
        this.gender = gender
    }

    fun print() {
        println("name : $name, age : $age, gender : $gender")
    }
}

fun main() {
    val info = Info("yuns", 20, "Male")
    info.print()
}

/* 결과
name : yuns, age : 20, gender : Male
*/
// data class
// 소괄호로 프로퍼티를 선언
// 자동으로 생성자, toString() 제공
data class Info(
    val name: String,
    val age: Int,
    val gender: String
)

fun main() {
    val info = Info("yuns", 20, "Male")
    println(info)
}

/* 결과
Info(name=yuns, age=20, gender=Male)
*/

오브젝트 클래스

  • object 키워드로 선언하여 사용합니다.
    • class가 있어야 하는 위치에 object 선언 -> 싱글톤 클래스
  • 생성자를 가질 수 없습니다.
  • 별도의 객체화 과정 없이 접근이 가능합니다.
  • 프로그램이 실행되는 동안 저장된 데이터는 손실되지 않고, 프로그램이 종료되면 소멸합니다.
  • 안드로이드에서 Activity, Fragment 구분하지 않고 데이터를 전달할 수 있습니다.
  • anonymous nested class를 생성할 때 사용합니다.
// object class
// main() 함수에서 객체화 하지 않고 바로 접근이 가능하다.
object InfoObject {
    var name: String = ""
    var age: Int = 0
    var gender: String = ""

    fun print() {
        println("name : $name, age : $age, gender : $gender")
    }
}

fun main() {
    val name = "yuns"
    val age = 20
    val gender = "Male"

    InfoObject.name = name
    InfoObject.age = age
    InfoObject.gender = gender
    InfoObject.print()
}

/* 결과
name : yuns, age : 20, gender : Male
*/