데이터 클래스
- 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
*/
'Kotlin' 카테고리의 다른 글
[Kotlin] 다양한 클래스(3) (0) | 2023.05.26 |
---|---|
[Kotlin] 다양한 클래스(2) (0) | 2023.05.26 |
[Kotlin] 추상 클래스 (0) | 2023.05.25 |
코틀린 정적 변수 (0) | 2023.03.14 |
코틀린 프로퍼티와 초기화 (0) | 2023.02.16 |