[kotlin] data class, sealed class, Getter/Setter (데이터클래스, 한정클래스)
chanto11
·2019. 12. 26. 14:06
데이터 클래스 (data class)
kotlin은 데이터 클래스라는 테이터를 저장하기위한 특별한 클래스를 제공합니다. 테이터 클래스를 선언하면 컴파일러가 자동으로 equals(), hashCode() , toString() 함수를 생성해줍니다.
data class Person(val name: String, val address: String)
fun main(args: Array<String>) {
val Hong = Person("Gil Dong", "Seoul")
val Hong2 = Person("Gil Dong", "Seoul")
val Kim = Person("Min Su", "Seoul")
println("Hong == Hong2? = ${Hong == Hong2}")
println("Hong === Hong2? = ${Hong === Hong2}")
println("Hong == Kim? = ${Hong == Kim}")
println("Hong.hashcode() = ${Hong.hashCode()}")
println("Hong = $Hong")
}
결과:
Hong == Hong2? = true
Hong === Hong2? = false
Hong == Kim? = false
Hong.hashcode() = 1254479994
Hong = Person(name=Gil Dong, address=Seoul)
Kim = Person(name=Min Su, address=Seoul)
한정 클래스 (sealed class)
한정 클래스는 enum클래스를 확장한 개념의 클래스로 하나가 아닌 여러개의 인스턴스를 생성할 수 있습니다. 그리고
이를 상속하는 클래스는 한정 클래스로 정의되는 여러 종류의 중 하나로 취급됩니다.
sealed class Country(val country: String) {
class Korea(country: String, val countryCode: Int) : Country(country)
class Japan(country: String, val countryCode: Int) : Country(country)
}
open class NonSealedCountry(val country: String) {
class Korea(country: String, val countryCode: Int) : NonSealedCountry(country)
class Japan(country: String, val countryCode: Int) : NonSealedCountry(country)
}
fun main(args: Array<String>) {
val country: Country = Country.Korea("Korea", 82)
val nonSealedCountry: NonSealedCountry = NonSealedCountry.Korea("Korea", 82)
val country_2: Country = Country("Japan") // 에러
val nonSealedCountry_2: NonSealedCountry = NonSealedCountry("Japan")
}
모든 클래스틀을 처리했을 경우 else를 처리하지 않아도 되지만 그렇지 않다면 when절에 else를 꼭 처리해주어야한다.
sealed class Country(val countryName: String) {
class Korea(countryName: String, val countryCode: Int) : Country(countryName)
class Japan(countryName: String, val countryCode: Int) : Country(countryName)
fun WhatCountry(country: Country) = when(country) {
is Country.Korea -> println("${country.countryName} ${country.countryCode}")
is Country.Japan -> println("${country.countryName} ${country.countryCode}")
else -> println("${country.countryName}")
}
}
Getter / Setter
Getter / Setter는 이미 프로퍼티 내부에 구현되어 있으며 이를 고쳐서 사용자정의 Getter / Setter로 사용할 수 있습니다.
사용자 지정 Getter / Setter는 get() 와 set(value)를 사용하여 선언할 수 있습니다.
open class Person(val age: Int, val name: String) {
val adult: Boolean
get() = age >= 19
var address: String = ""
set(value) {
field = value
}
}
'Kotlin' 카테고리의 다른 글
[kotlin] 널(null) 처리 [?: , ?. , as? , !! , lateinit] (0) | 2019.12.23 |
---|